为RtlValidateHeap DLL指定的地址无效

时间:2013-09-27 08:58:25

标签: c++ multithreading dll heap-memory heap-corruption

我是C ++的初学者。最近,我开始使用C ++进行图像处理。我试图定义和使用简单的函数,如:

Matrix MVE(Matrix R)
{
    Matrix *X = P.T();
    invX = *X->Inverse();
    delete X;  
    return invX;
}

Matrix MVE(Matrix R, double tolerance)
{
    int n = R.Y();
    int m = R.X();
    Matrix X(n,m);
for (int i = 0; i < n; ++i)
        M[i][m] = tolerance * R[i][m-1];

    return M;
}

在发布模式下没有问题,但是当我在debbug模式下运行时,我收到以下错误:

Windows在plappd.exe中触发了断点。 这可能是由于堆的损坏,这表明plappd.exe或它已加载的任何DLL中的错误。 这也可能是由于用户在plappd.exe具有焦点时按下F12。

我从其他DLL文件调用Matrix类的构造函数和操作。

我尝试从Debug Multithreaded(/ MTd)更改为Debug Multithreaded DLL(/ MDd),正如许多论坛所建议的那样,但它没有帮助解决问题。

有什么建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您是否可以使用某些工具(如Walker Dependency)来检查exe和dll是否使用相同的运行时间? (通常你检查MSVCR **。DLL) exe和dll必须在你的情况下使用相同的运行时间。

修改 另外,你说你改变了“从Debug Multithreaded(/ MTd)到Debug Multithreaded DLL(/ MDd)” 两者都是调试模式。由于您的运行时似乎在您的发布配置中正常工作,我想您应该使用相同的: 它应该是多线程(/ MT)或多线程DLL(/ MD)