-2

我正在研究 ANSI C。

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

我试图通过释放和删除功能释放我的对象使用的内存。但是,删除不是一个有效的功能。在另一边,free 看起来像是先运行良好。但我得到了free():invalid pointer..

我怎样才能解决这个问题?我可以做不同的事情吗?


这是我的一些代码..

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

3 回答 3

1

在 C 中,您在堆上分配了内存malloc,而释放是free。所以你是对的。 delete在 C++ 中使用,然后,仅当使用new运算符分配内存时。

如果您在调用 时遇到无效指针错误free,那么代码中的某处可能存在错误,如果您发布它,我们可以查看它。

于 2011-06-18T09:46:03.827 回答
1

也许您正在写超出分配内存的末尾。和

calloc(20, sizeof(char))

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

确保您没有尝试strcat()写超出str[18].

于 2011-06-18T10:36:56.280 回答
0

没有更多代码:

  1. 内存中的数组恰好在 ext 指向的内容之前超出其存储并损坏了 malloc() 用于跟踪内存大小以供后续调用 free() 的一种“标头”(想想 ((size_t *)ext )[-1] 保存来自 malloc 的大小)。
  2. 您在 ext[negative] 中使用了一个负数组索引,它造成了同样的损坏。
  3. ext 不知何故被修改。
于 2011-06-18T10:52:40.580 回答