c++ - 循环中的文件不能被读取超过 17 次

标签 c++ malloc

<分区>

我有一个程序可以读取一组输入文件(每个大约 130MB)并执行一些数据搜索。该程序必须多次读取所有输入文件。读取由循环执行。一切正常,直到循环到达第 17 次迭代。然后出现如下信息(vvfield为主程序名):

vvfield(13053) malloc: *** error for object 0x100100301: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap

循环可以执行少于 17 次,并且工作完美,但是如果循环执行超过 17 次,则会出现消息。主要问题是程序应该执行循环超过 200 次

不知道一个文件的读取次数有没有限制

输入文件在一个独立的函数中打开、关闭和清除,每个输入文件从开始读取到某个点(点是可变的,但有时可以是文件的结尾)。

我正在使用 g++ 进行编译,并在 Mac OS Snow Leopard 10.6.7 上工作

有人知道会发生什么吗?

提前致谢!

最佳答案

好的,这就是它告诉您的内容:循环 17 次后,您正试图释放一个不再指向 malloc block 的指针。为什么?因为它发生了 17 次,我怀疑你有数组中的指针并且你弄乱了一些索引,或者溢出了数组。看看你可能分配了 16 个任何东西的任何地方。

没有代码就很难提供更多帮助;然而,我假设它在那个时候崩溃了,所以你可以使用 gdb 来找出确切的位置。

现在,这是一个值(value) 64,000 美元的问题:如果您正在编写 C++,为什么要使用 malloc 并且是免费的? newdelete 怎么样?

关于c++ - 循环中的文件不能被读取超过 17 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6203139/

相关文章:

c++ - 移动 basic_iostream 时 basic_ostream 基会发生什么变化?

c++ - gcc上静态成员变量编译错误的概念检查

c - 使用结构指针和数组编写以下函数的代码

c - 当 malloc() 或 free() 给出段错误时,这意味着什么?

c - 使用动态数组的段错误

c++ - 如何在 std::transform 的 vector 中使用其他值?

c++ - 我可以在 std::move 之后重新使用像 std::vector 这样的复杂类吗?

c++ - 导出模板功能

c - 将 sbrk 分成 2 个

c - "reallocating"二维数组 C 的新内存时出现段错误