我正在通过gdb运行程序。它运行“free(buffer)”;“那么我得到这个消息: 程序收到信号SIGSEGV,分段错误。什么是“ar_ptr = arena_for_chunk(p);”意思?
0xb7e97103 in __GI___libc_free (mem=0xbffff11e) at malloc.c:2987
2987 ar_ptr = arena_for_chunk(p);
程序中的下一行是“fclose(inptr);”我该如何开始解决这个问题?
我正在通过gdb运行程序。它运行“free(buffer)”;“那么我得到这个消息: 程序收到信号SIGSEGV,分段错误。什么是“ar_ptr = arena_for_chunk(p);”意思?
0xb7e97103 in __GI___libc_free (mem=0xbffff11e) at malloc.c:2987
2987 ar_ptr = arena_for_chunk(p);
程序中的下一行是“fclose(inptr);”我该如何开始解决这个问题?
你的问题的实际答案是ar_ptr = arena_for_chunk(p);
是一个内部数据结构,它决定了内存应该释放到哪里。然而,如果你喜欢,你可以继续挖掘,直到你发现为什么p
几乎可以肯定是你传入的buffer
或者与它密切相关的某个值是“不正确的” - 但是这有点像在寻找你丢弃的密钥街灯,因为你可以在那里看到更好的,而不是试图找到他们放在他们的地方。
当标准库中的代码崩溃时,特别是每次运行任何不重要的程序时调用的代码,那么它由“坏的输入”引起的时间为99.9% - 请查看调用该函数的代码,而不是内部该函数(尽管值得回顾一下哪些错误来确定导致问题的哪个输入参数)。
实际的问题是,你的代码调用free()
一个坏的参数,这使得arena_for_chunk
要做错事 - 给定的值mem = 0xbffff11e
在上面的线,我想到的是buffer
实际上是在栈上的值,这不应该被释放。
这两个答案中的任何一个对你有帮助吗?如果是这样,接受其中一个(点击勾号)并且提高它(点击向上的三角形)将是有建设性的。如果他们都帮助,upvote和剔最有用的一个。如果没有帮助,解释为什么,我相信你会得到更多的帮助...... – 2013-03-11 19:58:35