0

我正在使用 Code::Blocks 在 C 中进行编程,我的程序可以正确编译,但在执行时会崩溃,这显然是非常著名的“进程返回 -1073741819 (0xC0000005)”。

我到处搜索,在我看来,我的问题与我在其他地方发现的不同(只是为了让您知道我在来这里之前已经尝试了很长时间寻找答案)。

我在我的代码中多次使用calloc,但这似乎不是问题:在尝试找到问题的根源之后,尝试“返回 0;”时似乎我的程序错误。最后!

当我尝试释放我动态分配的所有内容(我一开始没有做的)时,程序现在崩溃了。

您是否对问题的根源有一些直觉?

我的程序有 500 行长,而且现在很乱,所以我现在不把它放在那里,但如果你愿意,我可以!我是 C 的初学者,所以我可能完全错过了一些东西,谢谢你不要对我苛刻 =)

/// 编辑:找到解决方案///

好的,我想我明白为什么我的代码会那样崩溃(虽然我不明白为什么它在程序中这么晚才崩溃,但我认为它应该更早......)。

这是动态分配数组的构造问题。

对于那些感兴趣的人,你必须得到程序的结构才能解决问题(考虑到它没有结束并且没有足够的注释可读......这很丑陋......)我的程序中有两个大循环(126-> 180 和 283->388); 第一个是获取我动态分配的几个数组的大小,第二个是填充它们。这些循环应该几乎相同。但是我忘记了第一个循环的一半......所以大小不正确(太小)并且我填充了正确数量的整数......

现在它工作正常。感谢您帮助我,感谢您,我问了自己好问题=)(尽管我仍然不明白为什么错误出现在最后......)

4

1 回答 1

4

0xC0000005是 的错误代码Memory Access Violation。换句话说,SEGFAULT当您尝试访问取消引用的内存区域或尝试释放两次相同的对象时,通常会发生这种情况。

幸运的是,Code::Blocks 附带了一个调试器,当您可以准确地找出导致内存访问冲突的指令时。

于 2013-10-10T13:53:38.160 回答