我正在尝试使用短的 malloc,例如
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) 指的是 #define 值而不是 typedef ,因此是问题所在。
让我吃惊的是,
这在 C 中是否允许?