调试断言失败:_CrtIsValidHeapPointer(pUserData)

Mar*_*tti 5 c++ debugging qt assertion

有时我在调试模式(图像)中运行我的Qt项目时出现"Debug Assertion Failed"错误.我不知道我错在哪里,因为编译器没有说什么,我不知道如何找到我的错误.

我使用Qt Creator 2.4.1,Qt 4.8.1在Windows Vista下编程.

我的程序必须从激光设备读取一些信息并将它们保存到一个文件中,其代码类似于:

void runFunction()
{
    configure_Scanning(...);

    while(...)
    {
        // do something
        scanFunction();
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的"有罪"功能(我认为问题出在哪里)

void scanFunction()
{
    file.open();

    data = getDataFromDevice();

    if(flag)
    {
        if(QString::compare(lineB,"")!=0)
        {
            QTextStream out(&file);
            out << lineB << endl;
            lineB = "";
        }
        lineA.append(data+"\t");
    }
    else
    {
        if(QString::compare(lineA,"")!=0)
        {
            QTextStream out(&file);
            out << lineA << endl;
            lineA = "";
        }
        lineB.prepend(data+"\t");
    }

    file.close();
}
Run Code Online (Sandbox Code Playgroud)

其中lineAlineB最初是两个void QString:我的想法是我进行双向扫描以在2D矩阵中保存信息(从-X到​​+ X,反之亦然,而Y到达指定的目标).lineA记忆( - )到(+)读数; lineB记忆(+)到( - )读数.当扫描方向改变时,我将lineA(或lineB)写入文件,然后继续扫描.

你明白我说的话吗?你能建议我一个解决方案吗?

谢谢,对不起我的英文:P

小智 10

_CrtIsValidHeapPointerUserData表示您有一个堆损坏,调试堆检查器会注意到这一点.怀疑每个可以将任何信息写入任何已删除动态对象的人.是的,你会在重写发生时不会立即收到堆腐蚀,但是在下一次堆检查时,将在任何下一次内存分配/释放时执行.但是应该由单线程应用程序中的调用堆栈简单地跟踪.