2012-08-05 43 views
0

我有一個'運行時錯誤'當我嘗試將變量'b'的值複製到變量'a'。複製無符號短與memcpy

#include <stdio.h> 
#include <string.h> 

typedef struct{ 
     unsigned short a; 
}st1; 

main() 
{ 
     st1* myStruct; 
     unsigned short b = 0xFFFF; 

     memcpy(&myStruct->a, &b,sizeof(b)); 
} 

我想知道它爲什麼會發生。 任何幫助,將不勝感激。

+0

請注意,使用'memcpy()'來複制一個'unsigned short'就是用大錘來攻擊一個堅果。寫'myStruct-> a = b;'會做同樣的工作(只會更快更清晰),並且會造成同樣的破壞,而'myStruct'是一個未初始化的指針。 – 2013-03-20 01:04:29

回答

1

因爲您沒有爲myStruct分配內存。你沒有初始化它,所以它的值是memcpy()期間的一些隨機值。因此,&myStruct->a正在訪問某個隨機地址,並且寫入&myStruct->a可能會導致運行時錯誤。

+0

你是對的。 我必須添加以下行: myStruct =(st1 *)malloc(sizeof(st1)); 非常感謝! – user1577487 2012-08-05 15:10:37