datatype misalignment 错误

datatype misalignment 错误是一个隐晦的错误,因为你在编译的过程中看不到的,但是在DEBUG的时候,执行到某些地方就跳出这个错误了。

 

datatype misalignment 错误怎么引起的呢,我查了一些网上的资料,总的来说就是位对齐引起的错误。类型转换,结构体成员的长度一般会引起这些错误。


 char *tempstr1=(char *)malloc(sizeof(char)*4);
 LPSYSTEMTIME lpSystemTime=(LPSYSTEMTIME)malloc(sizeof(LPSYSTEMTIME));
 GetLocalTime(lpSystemTime);
 _itoa(lpSystemTime->wYear,tempstr1,10);

 

上面语句执行完了,再下一条语句就会出会错误了。我们来分析一下:

我一开始会以为是lpSystemTime->wYear的问题,因为他是WORD型的,只有INT的一半,结果我把它赋值给INT型再带进去,发现结果还是一样的。不就是四条语句吗,我再一分析,发现出现在第二条语句身上了,LPSYSTEMTIME 这家伙是个指针型的,我SIZEOF它,不就结果为4吗?而它的实际结构体内应该是8个WORD长度,相当于16个CHAR了。我把sizeof(LPSYSTEMTIME)改成sizeof(8*WORD),通过,再单步下去,没有问题了。

 

      这只是导致这种错误的一个方法,但我相信大伙总结的经验,那就是导致这种错误一般是位对齐导致的。知道这个以后,以后找这种错误就容易很多了。

 

你可能感兴趣的:(datatype misalignment 错误)