指定给 RtlValidateHeap DLL 的地址无效

Invalid address specified to RtlValidateHeap DLL

本文关键字:地址 无效 DLL RtlValidateHeap      更新时间:2023-10-16

我是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 或它已加载的任何 DLL 中存在错误.exe。这也可能是由于用户在 plappd.exe 具有焦点时按 F12。

我正在从其他 DLL 文件调用矩阵类的构造函数和操作。

正如许多论坛所建议的那样,我尝试从调试多线程 (/MTd) 更改为调试多线程 DLL (/MDd),但这无助于解决问题。

有什么建议吗?

提前谢谢。

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

编辑:另外,您说您将"从调试多线程 (/MTd) 更改为调试多线程 DLL (/MDd)"两者都是调试模式。由于您的运行时似乎在您的发布配置中工作正常,我想您应该使用相同的:它应该是多线程 (/MT) 或多线程 DLL (/MD)