指定给 RtlValidateHeap DLL 的地址无效
Invalid address specified to RtlValidateHeap DLL
我是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)
相关文章:
- Valgrind 大小为 8 且地址 0x5b7e520 的读取无效,在大小为 16 的块内为 0 字节 free'd
- 应用地址清理器后,免费无效指针消失
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 删除无效地址时C++引发异常
- 无效* 地址的整数* 值
- thread_local静态类在程序退出时在无效地址处销毁
- 是什么原因导致指定为RtlvalidateHeap的无效地址
- 不同类的虚拟函数共享相同的(无效?)内存地址
- 提升 UDP 组播接收器: set_option:请求的地址在其上下文中无效
- 在无效地址上,boost::asio::ip:::address::from_string 没有引发异常
- 地址清理器在静态强制转换无效指针时报告错误
- 在析构函数中使用 delete[]:为 RtlValidateHeap 指定的地址无效
- GDB打印具有虚拟函数类的非弦乐值的静态常量阵列的无效地址
- 访问无效的指针并进行地址
- VirtualProtect和kernel32.dll-试图访问无效地址
- 删除指向派生类的指针时,为RtlValidateHeap指定的地址无效
- 指定给 RtlValidateHeap DLL 的地址无效
- HEAP错误为RtlValidateHeap指定的地址无效
- 使用智能卡签名(C++)时为RtlFreeHeap指定的地址无效
- 在函数中使用delete[]:为RtlValidateHeap指定的地址无效