次のような短い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) は typedef ではなく #define 値を参照していたため、問題が発生しました。
私を驚かせるのは、
これはCで許可されていますか?