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

时间:2011-06-18 09:41:25

标签: c malloc free calloc

我正在研究ANSI C。

我有一个用char数组创建的字符串对象。 我认为该对象会造成内存泄漏.. 当我运行我的程序大约五分钟(可能几乎10000次迭代)时,我使用的内存变得越来越大......

我试图用free和delete函数释放我的对象使用的内存。但是,删除不是有效的功能。在另一方面,自由看起来像先跑好。但我得到了free():invalid pointer ..

我该如何解决这个问题?我可以用不同的方式做到吗?


这是我的一些代码..

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

3 个答案:

答案 0 :(得分:1)

在C中,您使用malloc在堆上分配了内存,并且发布时使用free。所以你在那里是对的。 delete在C ++中使用,然后,仅当内存使用new运算符分配时才会使用。

如果您在调用free时收到无效指针错误,则代码中可能存在错误,如果您发布错误,我们可以查看它。

答案 1 :(得分:1)

也许你正在写出已分配内存的结尾。与

calloc(20, sizeof(char))

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

非常确保strcat()没有人尝试在str[18]之外写“常规”字符。

答案 2 :(得分:0)

没有更多代码:

  1. 内存中的一个数组,就在ext指向超出其存储空间之前,并损坏了一种类型的“标题”,即malloc()用于跟踪内存的大小以便后续调用free()(想想((size_t) *)ext)[ - 1]持有malloc的大小)。
  2. 您使用负数组索引进入ext [negative],它们执行相同的损坏。
  3. ext以某种方式被修改。