Я пытаюсь использовать malloc short, что-то вроде
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?