gpt4 book ai didi

c - malloc() 函数崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:54 26 4
gpt4 key购买 nike

我有一个程序,我正在从一个 txt 文件中读取数据。它基本上是每行中的一个(固定在第一行)整数。

例子:

    11
1 0 0 1 0 0 0 0 0 2 0
0 0 0 0 0 0 0 1 2 0 0
0 0 0 0 0 0 3 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

我可以毫无问题地将它们读入一个 int-Pointer 并将这个指针传递给另一个函数:

    Term initTerm(int size, int* Exponents){
Term a = newTerm(size)
//Some code to insert the int's of the pointer into the pointer of Term
return a
}

鉴于

    typedef struct Term{
int* Exponents;
int size; //Number of ints in the Exponents-pointer
}Term;

    Term newTerm(int size){
Term res;
res.Exponents = malloc(size*sizeof(int));
//Check for NULL
res.size = size;
return res;
}

现在的问题如下:在 194 次完全正确的 initTerm 调用之后,第 195 次调用使程序崩溃。调试确保,失败发生在 malloc 调用中(而不是在检查返回指针的有效性时)。如果我更改调用 initTerm 的代码的顺序,我可能会达到 Term ~300,对于某些编译标志,如 -O3 或 -pg(我正在使用 gcc-Compiler)也是如此,更改正确调用的次数.

我已经发现,如果额外分配的头部已损坏,通常由多线程引起,则 malloc() 会崩溃。由于我的程序在每一行代码中都是完全单线程的,我想知道我能做些什么来通读整个文件(目前有 710 个术语,可能会增长到几兆字节)

编辑:感谢您的帮助,我找到了问题所在。关于 malloc-Failure 只是症状,你是对的,因为我刚刚意识到我用来从文件中获取行的缓冲区从未重置,因此开始在我的 RAM 中的任何地方徘徊。复制地址,malloc 返回,到一个指针并在提取数字后重置缓冲区,现在工作正常!

最佳答案

看起来像是通过缓冲区溢出、使用释放的内存、使用野指针等造成的标准内存损坏,尽管它不在所提供的代码中。
malloc() 只会在簿记数据结构损坏(可能)或实现有问题(如果您不自己动手则极不可能)时崩溃。

使用带有额外检查的 debug_malloc 或像 valgrind 这样的检查器。您可能会考虑在有趣的点插入完整的堆检查。

关于c - malloc() 函数崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23044617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com