2012-08-05 61 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