我试图释放我从malloc()
分配的向量中分配的指针,当我尝试删除第一个元素(index [0])时,它工作,当我尝试删除第二个(index [1])我收到此错误:
malloc: *** error for object 0x100200218: pointer being freed was not allocated
代码:
table->t = malloc (sizeof (entry) * tam); entry * elem = &table->t[1]; free(elem);
你只能对malloc()
和family返回的指针调用(或需要) free()
。
引用C11
,章节§7.22.3.3
[…]否则,如果参数与先前由内存管理函数返回的指针不匹配,或者如果通过调用
free
或realloc
释放了空间,则行为未定义。
在您的情况下, table->t
(或, &table->t[0]
)是指针,而不是&table->t[1]
。
也就是说, free()
ing table->t
释放了整个内存块,你不需要(你不能,而不是)单独/部分释放。 有关详细信息,请参阅此答案 。
它适用于第一个元素,因为&table-> t [0]等于table-> t 。 那是因为第一个元素与数组本身具有相同的地址(根据数组的定义)。 并且由于数组本身具有已分配的地址,因此只能释放该地址。
malloc()通过分配单个连续内存区域来工作,其可用大小是由它传递的单个整数参数。 它返回分配区域的指针。
您只能释放返回的指针一次,而不是它的子集。
数组中的数组不是对象,它们是指针算法的合成糖,这可能是C编程的主要问题,如果你致力于学习C,你应该仔细研究这个领域。
以上就是c/c++开发分享C – 被释放的指针未被分配相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519839.html