什么可能导致ntdll.dll中的C ++程序崩溃?

时间:2012-07-24 15:59:33

标签: c++ access-violation

我的Windows C ++程序比以往任何时候都更糟糕。它会自发崩溃,通常只是在函数返回任何东西时/之后。指示的故障模块有时是程序本身,有时是ntdll.dll,有时是StackHash_something,而异常代码有时是访问冲突,有时是40000015.这让我发疯。我已经看到这次崩溃只是在为某个变量赋值之后发生了一次,如果我评论了执行该赋值的行(并在其他地方发生......),则不会再发生这种情况。

然而我无法追查问题......任何提示?

我实际程序中的一段代码,用来举例说明我所说的内容(尽管我怀疑它可能非常有用):

void Propozitie::AdaugaConstructieIncidenta(wstring text)
{
// Some function that creates/updates a member in a "Propozitie" object
// constr_incidenta is Entitate*, member of "Propozitie"
// p is a wstring, member of object "Entitate"
delete constr_incidenta;
constr_incidenta = new Entitate;
constr_incidenta->p = text;
// ^ app crashes here.
//had it been constr_incidenta->p = L""; it wouldn't have crashed
}

更新:我重新安装了Windows,GCC等等。我得到了同样无法解释的错误!也许一个暗示是,在程序执行了一组递归函数之后才进行赋值,这些函数在路上创建了一些对象......?我很绝望。

3 个答案:

答案 0 :(得分:0)

听起来您需要重新评估所有代码。我认为这是一个很大的代码库,你不能在这里发布,但是当内存开始被破坏时你通常会遇到这类错误,因为你在初始化内存的边界之外写作和/或读取。

答案 1 :(得分:0)

Entitate是否有默认构造函数?如果没有,当您调用“new Entitate”时,它将不会被初始化。

答案 2 :(得分:0)

我的项目中遇到了同样的问题。最后这是一个循环函数调用。也许在你的递归中确保你不会意外地进行循环调用或溢出调用堆栈。

我想留言,但我没有足够的代表。