Expression: _CrtIsValidHeapPointer(pUserData)
程序遇到如题的运行时报错,参考下面这段文字,采取将自定义类的对象定义改为new方式生成后问题解决。
!!Expression: _CrtIsValidHeapPointer(pUserData)
void CImageRecView::OnFileColhistogram()
{
// TODO: Add your command handler code here
CImageRecDoc *pDoc = GetDocument();
LPSTR lpDIB;
ColHistogram MyColHist;
lpDIB = (LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
pMyColHist->RGBtoHSV(lpDIB);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
}
问题就出在红色的地方,自定义了一个类
将上面的语句改为
ColHistogram * pMyColHist;
pMyColHist = new ColHistogram;
就可以了,不过现在也不知道为什么
(MSDN)中的这段话
The _CrtIsValidHeapPointer function is used to ensure that a specific memory address is within the local heap. The “local” heap refers to the heap created and managed by a particular instance of the C run-time library. If a dynamically linked library (DLL) contains a static link to the run-time library, then it has its own instance of the run-time heap, and therefore its own heap, independent of the application’s local heap. When _DEBUG is not defined, calls to _CrtIsValidHeapPointer are removed during preprocessing.
看了这段话稍微觉得有点意思了,我在程序中自己申请了本地堆,也有要生成动态连接库的DIB类,要连接c运行库,那么我的ColHistogram的实例必须动态生成,因为它在c运行库中没有对应的堆。比如我添加Cstring str;程序就不会有问题,但是我只知道CString是系统定义的,和c运行库有什么关系我就不清楚了。如果静态链接C运行库,那么,dll就要拥有一个独立于应用程序(调用它的exe)的本地堆(但是我的程序没有),如果没有定义_DEBUG,那么_CrtIsValidHeapPointer将被预处理器移除。大概就是这个样子,上面所说的很多东西我都不确定,只是现在的一种解释。
还有dbgheap.c文件似乎是在dll里,还没有办法看
转自:http://blog.csdn.net/haokongdashi/archive/2010/02/23/5318461.aspx
转载于:https://www.cnblogs.com/sifenkesi/archive/2011/03/25/1995066.html
Expression: _CrtIsValidHeapPointer(pUserData)相关推荐
- _CrtIsValidHeapPointer(pUserData)是什么意思?
_CrtIsValidHeapPointer(pUserData)是什么意思? 2010-07-15 13:50Buggiant | 分类:VC++ | 浏览7754次 Expression:_Crt ...
- _ASSERTE(_CrtIsValidHeapPointer(pUserData))错误详解
可能原因:DLL和EXE主程序使用的不是同一个堆造成. 解决办法: 1. 采用谁分配谁释放的原则: 2. 绕过 new 和 delete,使用 GlovalAlloc 和 GlobalFree: 3. ...
- 第一章恶意软件静态分析基础
第一章恶意软件静态分析基础 <基于数据科学的恶意软件分析> 代码清单1-1 加载pefile模块并解析PE文件(ircbot.exe) 代码清单1-2 遍历PE文件的各个节并打印有关它们的 ...
- 小心DLL链接静态库时的内存错误
最近写的模块,在独立的应用程序中测试是没问题的,但把它装配成DLL后,再在另一个应用程序中调用时却出现了内存错误.程序的模块链接关系大概是这样的: module就是我所写的模块,在这里被封装为DLL, ...
- 解决一个运行时错误的问题
解决由于程序删除内存方式写得不恰当导致的运行时错误. 使用调试运行程序时弹出断言错误,以下是调试信息: HEAP[xxx.exe]: Invalid address specified to RtlV ...
- 使用Tensor Expression张量表达式处理算子
使用Tensor Expression张量表达式处理算子 这是TVM中Tensor表达语言的入门教程.TVM使用特定于域的张量表达式来进行有效的内核构造. 本文将演示使用张量表达式语言的基本工作流程. ...
- Constant expression required
switch 语句编译报错Constant expression required 问题:case语句后面必须是常量,使用final修饰 public static final int Notif ...
- python中正确的表达式_python中如何正确使用正则表达式的详细模式(Verbose mode expression)...
简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正 ...
- Regular Expression Matching
正则匹配 Regular Expression Matching Implement regular expression matching with support for '.' and '*'. ...
最新文章
- [国际A类会议] 2018最最最顶级的人工智能国际峰会汇总!CCF推荐!
- 获取AD用户和OU属性字段名称
- 计算机视觉与深度学习 | 使用HOG特征进行数字分类
- Angular:why click add button does not work for the second time
- React学习小结(二)
- Dedesql数据库类详解(二次开发必备教程)(转)
- scanf函数具体解释与缓冲区
- Codeforces 437D 贪心+并查集
- Android 在popupWindow上用autoCompleteTextView报错(Android 6.0报错,8.0没有问题)
- 挑战 Oracle 的全球首个 AI 原生数据库 GaussDB,华为将开源
- 基于jsp的失物招领系统_基于Java web的校园失物招领系统
- paip. sip module implements API v10.0 to v10.1 but the PyQt4.QtCore module requires API v9.2
- 反射: 反射在中Android运用
- 计算机windows解压文件,win7怎么用DOS命令解压缩文件 DOS解压文件方法
- MATLAB代码:基于分布式优化的多产消者非合作博弈能量共享
- 使用Vue开发Chrome插件
- adb操作命令详大全利用adb命令查看apk文件包名
- 在launcher中隐藏app图标
- 实变函数与泛函分析知识点整理
- RobotFrameWork Web自动化测试之测试环境搭建