我想用一种短的,类似
typedef union _SOME_STRUCT_ {
struct {
USHORT u:4;
USHORT v:4;
USHORT w:4;
} x;
USHORT word;
} SOME_STRUCT, *PSOME_STRUCT;
PSOME_STRUCT p = malloc (sizeof (SOME_STRUCT));
if (p) {
p->x.u = 0;
}
free (p); // **** RANDOMLY CRASHING HERE ****
我已经调试了几天了,还不清楚,
注(编辑):Linux和gcc版本3.4.6 20060404
使用VALGRIND发现问题
但是,我想把它记录在这里,这样我的开发人员就可以意识到这种情况。。。
实际上我把结构定义为
typedef union _SOME_STRUCT_ {
struct {
USHORT u:4;
USHORT v:4;
USHORT w:4;
} x;
USHORT word;
} ALBUM, *PALBUM;
还有我在代码中定义的其他地方
#define ALBUM "album"
因此,sizeof(ALBUM)指的是定义值,而不是typedef,因此产生了这个问题。
让我吃惊的是,
这在C允许吗?
最佳答案
尝试通过valgrind,一个开源程序和完全免费的,也许它可以帮助你知道问题在哪里。别忘了用调试符号编译:gcc-g[etc]。
希望能帮上忙。。
关于c - 2字节的Malloc给出了问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/855607/