C 什么';释放内存的最佳方法是什么?

C 什么';释放内存的最佳方法是什么?,c,malloc,free,calloc,C,Malloc,Free,Calloc,我正在研究ANSI C 我有一个字符串对象,它是用char数组创建的。。 我认为该对象导致内存泄漏。。 当我运行我的程序大约5分钟(可能是近10000次迭代)时,我使用的内存变得越来越大 我试图用free和delete函数释放我的对象使用过的内存。但是,delete不是有效的函数。另一方面,free首先看起来运行良好。但是我得到了free():无效指针 我怎样才能解决这个问题?我可以换一种方式吗 这是我的一点代码 char *ext; ext = calloc(20, sizeof(char)

我正在研究ANSI C

我有一个字符串对象,它是用char数组创建的。。 我认为该对象导致内存泄漏。。 当我运行我的程序大约5分钟(可能是近10000次迭代)时,我使用的内存变得越来越大

我试图用free和delete函数释放我的对象使用过的内存。但是,delete不是有效的函数。另一方面,free首先看起来运行良好。但是我得到了
free():无效指针

我怎样才能解决这个问题?我可以换一种方式吗


这是我的一点代码

char *ext;
ext = calloc(20, sizeof(char));
//do something with ext
free(ext);

在C语言中,您使用
malloc
在堆上分配内存,而release使用
free
。你说得对<在C++中使用代码>删除< /代码>,然后,仅当内存分配为<代码>新< /Calp>运算符> < /P>
如果您在调用
free
时遇到无效指针错误,则代码中可能存在错误,如果您将其发布,我们可以查看一下。

可能您正在写入已分配内存的末尾。与

calloc(20, sizeof(char))
为20个字符分配空间(19个“常规”字符和字符串的空终止符)

确保非常确保您的
strcat()
在没有更多代码的情况下,尝试在
str[18]
之外写入“常规”字符:

  • 内存中的数组正好位于ext指向的超出其存储范围的数组之前,并损坏了malloc()用于跟踪内存大小以供后续调用free()的一种“头”(想想((size_t*)ext)[-1]保存malloc中的大小)。
  • 您在ext[negative]中使用了一个负数组索引,这也造成了相同的损坏。
  • ext不知怎么被修改了。
    free
    是正确的功能。如果您收到
    无效指针
    错误,这意味着您的代码中有一个bug。请发布相关部分。没有代码,没有cookie。这是我的一点代码。。当我第一次调用我的函数时,我创建了一个新的char*,并且在函数结束时释放。。。我无法将我的所有程序复制到此论坛,因为它足够长了..>@Bobby,看起来不错,但是
    //用ext做点什么,它是不是被写入的,你是不是偶然做了
    ext=/*一些值*/
    ?-1错误在代码中,只有你能看到;如果你不给我们看代码,你就得自己解决