c/c++语言开发共享C – 被释放的指针未被分配

我试图释放我从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

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

    在您的情况下, 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

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐