我想用一种短的,类似

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/

10-11 06:11