C - 被释放的指针未被分配

Mat*_*ber 0 c memory free

我试图释放我从分配的向量中分配的指针malloc(),当我尝试删除第一个元素(index [0])时,它工作,当我尝试删除第二个(index [1])我收到这个错误:

malloc: *** error for object 0x100200218: pointer being freed was not allocated
Run Code Online (Sandbox Code Playgroud)

代码:

table->t = malloc (sizeof (entry) * tam);
entry * elem = &table->t[1];
free(elem);
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 11

你只能调用(或需要)free()on malloc()和由family 返回的指针.

引用C11,章节§7.22.3.3

[...]否则,如果参数与先前由内存管理函数返回的指针不匹配,或者如果通过调用freeor 释放了空间realloc,则行为未定义.

在你的情况下,table->t(或&table->t[0])是指针,而不是&table->t[1].

也就是说,free()-ing table->t释放整个内存块,你不需要(你不能,而不是)单独/部分释放.有关详细信息,请参阅此答案.

  • 也许添加释放`&table-> t [0]`只能起作用,因为它相当于`table-> t`. (2认同)