У меня есть структура, которая содержит некоторые элементы, я освобождаю память этой структуры в цикле, примерно как:
for (i = 0; i < teller; i++) {
free((glycan+i)->desc);
}
free(glycan)
Я предполагаю, что указатели все еще указывают на пустые блоки памяти, поэтомуя хотел установить для них значение NULL следующим образом:
for (i = teller; i > 0; i--) {
(glycan+i)->desc = NULL;
}
glycan = NULL;
Вальгринд, однако, говорит мне кое-что, чего я не очень понимаю:
==11783== Invalid write of size 4
==11783== at 0x8048F49: main (spectral_matcher.c:122)
==11783== Address 0x431c070 is 72 bytes inside a block of size 28,000 free'd
==11783== at 0x4027C02: free (vg_replace_malloc.c:366)
==11783== by 0x8048F2C: main (spectral_matcher.c:121)
Может кто-нибудь объяснить мне, почему это предупреждение /происходит ошибка, и что я должен сделать по-другому, чтобы не решить ее?
РЕДАКТИРОВАТЬ: Я знаю, что после освобождения я устанавливаю указатель на NULL, освобождение помечает только как свободную память, поэтомууказатель все еще не поврежден (если я не ошибаюсь), который впоследствии я хочу установить в NULL.