c/c++语言开发共享C – 如果使用realloc是免费的吗?

使用realloc时内存是否自动释放? 或者是否有必要免费使用realloc? 以下哪项是正确的?

//Situation A ptr1 = realloc(ptr1, 3 * sizeof(int)); //Situation B ptr1 = realloc(ptr2, 3 * sizeof(int)); free(ptr1); ptr1 = ptr2; 

    两者都不正确。 realloc()可以返回指向新分配的内存的指针或错误时返回NULL。 你应该做的是检查返回值:

     ptr1 = realloc(ptr2, 3 * sizeof(int)); if (!ptr1) { /* Do something here to handle the failure */ /* ptr2 is still pointing to allocated memory, so you may need to free(ptr2) here */ } /* Success! ptr1 is now pointing to allocated memory and ptr2 was deallocated already */ free(ptr1); 

    ptr1 = realloc(ptr2, 3 * sizeof(int)); ptr2无效,不应使用。 你只需要释放ptr1 。 在某些情况下, realloc的返回值将与您传入的值相同。

    您可以放心地考虑ptr1=realloc(ptr2, ...等同于此:

     ptr1 = malloc(...); memcpy(ptr1, ptr2, ...); free(ptr2); 

    这是大多数情况下发生的情况,除非新的大小仍然适合旧的内存块 – 然后realloc可以返回原始内存块。

    作为其他分配函数, realloc如果失败则返回NULL – 您可能想要检查它。

    realloc()自动释放原始内存,或者如果realloc()为较小的大小,或者可以使用未分配的内存来简单地扩展原始分配,则可以不加改变地返回(除了元数据)。

    根据https://www.cplusplus.com/reference/clibrary/cstdlib/realloc/ ,如果重新分配成功, realloc将返回新的内存块,如果没有,则保留原始内存块。 标准用法如下所示:

     ptr2 = realloc(ptr1, new_size); if (ptr2 == NULL) { //ptr1 still contains pointer to original array } else { //ptr2 contains new array, ptr1 is invalid } 

    在这两种情况下,必须释放ptr1。

    情况B更复杂,因为ptr2可能指向释放的空间。 或不。 这取决于它是否可以重新分配。 在B中的realloc之后不应该使用ptr2。

    需要了解更多c/c++开发分享C – 如果使用realloc是免费的吗?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享C – 如果使用realloc是免费的吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979966.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐