调用new时调试一个奇怪的错误

时间:2012-04-19 18:43:02

标签: visual-c++

我有一个程序在运行时使用Microsoft Visual C ++ 2008 Express在行上崩溃

comparison_vectors = new vec_element[(rbfnetparams->comparison_vector_length)+1];

错误myprog.exe中0x7c93426d处的未处理异常:0xC0000005:访问冲突读取位置0x00000000

rbfnetparams->comparison_vector_length评估为4(应该在调试器中检查),当我将测试行更改为:

时,事情仍然在崩溃
comparison_vectors = new vec_element[5];

vec_element是一个包含多个整数,双精度数和一些bool但没有方法或构造函数的结构。如果我用malloc替换new,那么事情会运行,但随后在其他地方崩溃。每次运行此行时都不会崩溃,有时只会出现这种情况,但似乎每次都会在此行的相同迭代次数之后执行此操作。程序中此时的内存使用量仅为10MB。

这变得比较陌生,因为同一个程序在Solaris上的gcc下编译和运行,这通常会显示比Windows更多的错误。

任何帮助都会受到赞赏,因为我不知道如何调试这个。

1 个答案:

答案 0 :(得分:1)

Access violation reading location 0x00000000表示“您取消引用NULL指针。”当你到达这一行时,rbfnetparams偶尔会NULL,因此你会得到错误。

我无法解释为什么comparison_vectors = new vec_element[5];崩溃了。它是否是相同的错误消息?

检查行前rbfnetparams是否为NULL,并查看它是否被点击(或添加条件断点)。然后确定rbfnetparamsNULL的事实是否是其他地方更大错误的症状。

取消引用NULL指针未定义。 Solaris编译器可能会执行掩盖错误的优化。 That's allowed by the Standard(阅读该帖子引用的整个系列)。