程序遇到如题的运行时报错,参考下面这段文字,采取将自定义类的对象定义改为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)相关推荐

  1. _CrtIsValidHeapPointer(pUserData)是什么意思?

    _CrtIsValidHeapPointer(pUserData)是什么意思? 2010-07-15 13:50Buggiant | 分类:VC++ | 浏览7754次 Expression:_Crt ...

  2. _ASSERTE(_CrtIsValidHeapPointer(pUserData))错误详解

    可能原因:DLL和EXE主程序使用的不是同一个堆造成. 解决办法: 1. 采用谁分配谁释放的原则: 2. 绕过 new 和 delete,使用 GlovalAlloc 和 GlobalFree: 3. ...

  3. 第一章恶意软件静态分析基础

    第一章恶意软件静态分析基础 <基于数据科学的恶意软件分析> 代码清单1-1 加载pefile模块并解析PE文件(ircbot.exe) 代码清单1-2 遍历PE文件的各个节并打印有关它们的 ...

  4. 小心DLL链接静态库时的内存错误

    最近写的模块,在独立的应用程序中测试是没问题的,但把它装配成DLL后,再在另一个应用程序中调用时却出现了内存错误.程序的模块链接关系大概是这样的: module就是我所写的模块,在这里被封装为DLL, ...

  5. 解决一个运行时错误的问题

    解决由于程序删除内存方式写得不恰当导致的运行时错误. 使用调试运行程序时弹出断言错误,以下是调试信息: HEAP[xxx.exe]: Invalid address specified to RtlV ...

  6. 使用Tensor Expression张量表达式处理算子

    使用Tensor Expression张量表达式处理算子 这是TVM中Tensor表达语言的入门教程.TVM使用特定于域的张量表达式来进行有效的内核构造. 本文将演示使用张量表达式语言的基本工作流程. ...

  7. Constant expression required

    switch 语句编译报错Constant expression required  问题:case语句后面必须是常量,使用final修饰  public static final int Notif ...

  8. python中正确的表达式_python中如何正确使用正则表达式的详细模式(Verbose mode expression)...

    简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正 ...

  9. Regular Expression Matching

    正则匹配 Regular Expression Matching Implement regular expression matching with support for '.' and '*'. ...

最新文章

  1. [国际A类会议] 2018最最最顶级的人工智能国际峰会汇总!CCF推荐!
  2. 获取AD用户和OU属性字段名称
  3. 计算机视觉与深度学习 | 使用HOG特征进行数字分类
  4. Angular:why click add button does not work for the second time
  5. React学习小结(二)
  6. Dedesql数据库类详解(二次开发必备教程)(转)
  7. scanf函数具体解释与缓冲区
  8. Codeforces 437D 贪心+并查集
  9. Android 在popupWindow上用autoCompleteTextView报错(Android 6.0报错,8.0没有问题)
  10. 挑战 Oracle 的全球首个 AI 原生数据库 GaussDB,华为将开源
  11. 基于jsp的失物招领系统_基于Java web的校园失物招领系统
  12. paip. sip module implements API v10.0 to v10.1 but the PyQt4.QtCore module requires API v9.2
  13. 反射: 反射在中Android运用
  14. 计算机windows解压文件,win7怎么用DOS命令解压缩文件 DOS解压文件方法
  15. MATLAB代码:基于分布式优化的多产消者非合作博弈能量共享
  16. 使用Vue开发Chrome插件
  17. adb操作命令详大全利用adb命令查看apk文件包名
  18. 在launcher中隐藏app图标
  19. 实变函数与泛函分析知识点整理
  20. RobotFrameWork Web自动化测试之测试环境搭建

热门文章

  1. ML 03、机器学习的三要素
  2. gearman python 实例
  3. 15个Android通用流行框架大全
  4. TensorFlow从1到2(十三)图片风格迁移
  5. springboot thymeleaf 生成静态html
  6. JavaScript ES2015
  7. gcc 使用 stdio.h
  8. es6 匿名函数求阶乘
  9. Android项目Build报错Unable to execute dx(65535问题解决方案)
  10. 运维-系统架构师经验总结: