У меня здесь небольшая, но неприятная проблема.

Итак, вот мои структуры.

typedef struct tElem {
    struct tElem *ptr;
    int data;
} *tElemPtr;


typedef struct {
    tElemPtr Act;
    tElemPtr First;
} tList;

А вот и распределение. Здесь происходит повреждение кучи .

tElemPtr newElemPtr = (tElemPtr)malloc(sizeof(tElemPtr));
.
.
.
free(newElemPtr);

Но этого не происходит, когда я использую размер реальной конструкции.

tElemPtr newElemPtr = (tElemPtr)malloc(sizeof(struct tElem));
.
.
.
free(newElemPtr);

Не мог бы кто-нибудь объяснить мне, что мне здесь не хватает?

Спасибо.

0
retqtcffqhfxamuknh 4 Окт 2020 в 00:03

1 ответ

Лучший ответ

Это потому, что вы нарушаете указатель, а не новую структуру

sizeof(tElemPtr) вернет размер указателя, а не размер структуры.

1
shrewmouse 3 Окт 2020 в 21:10