我有一个程序在运行时使用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更多的错误。
任何帮助都会受到赞赏,因为我不知道如何调试这个。
答案 0 :(得分:1)
Access violation reading location 0x00000000
表示“您取消引用NULL
指针。”当你到达这一行时,rbfnetparams
偶尔会NULL
,因此你会得到错误。
我无法解释为什么comparison_vectors = new vec_element[5];
崩溃了。它是否是相同的错误消息?
检查行前rbfnetparams
是否为NULL
,并查看它是否被点击(或添加条件断点)。然后确定rbfnetparams
是NULL
的事实是否是其他地方更大错误的症状。
取消引用NULL
指针未定义。 Solaris编译器可能会执行掩盖错误的优化。 That's allowed by the Standard(阅读该帖子引用的整个系列)。