热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请高手解答:GDI+BitMapnew成功,GetLastStatus返回无效。delete指针崩溃,求解答

请高手解答:GDI+BitMapnew成功,GetLastStatus返回无效。delete指针崩溃,求解答代码如下:Bitmap*pBitmap::newBitma
请高手解答:GDI+ BitMap new成功,GetLastStatus返回无效。delete指针崩溃,求解答
代码如下:

    Bitmap *pBitmap = ::new Bitmap(wszOutPath);
    if (Ok == pBitmap->GetLastStatus())
    {
        m_vecFacepBitmap.push_back(pBitmap);
    }
    else
    {
       delete pBitmap;
       pBitmap = NULL;
    }

现在的情况是 如果wszOutPath指定的路径不存在,new成功pBitmap的值不为NULL。但是GetLastStatus()!=Ok; 
请问高手们,这时候应该怎么处理pBitmap?

现在我这种情况下,如果delete pBitmap;则会崩溃。
如果不delete则会有内存泄露。
求解!!!

17 个解决方案

#1


不存在会返回
InvalidParameter

#2


那可以先判断一下wszOutPath指定的路径是否存在呀,不存在就返回吧

#3


引用 1 楼 hdt 的回复:
不存在会返回
InvalidParameter


对,会返回InvalidParameter,现在的问题是返回InvalidParameter后,怎么释放指针?

#4


引用 2 楼 zk0233 的回复:
那可以先判断一下wszOutPath指定的路径是否存在呀,不存在就返回吧


这样没问题,但是我想知道怎么能够解决指针释放的问题

#5


MSDN给的例子是利用gcnew让垃圾收集机制自动释放。

private:
   Bitmap^ image1;
   void Button1_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      try
      {

         // Retrieve the image.
         image1 = gcnew Bitmap( "C:\\Documents and Settings\\All Users\\"
         "Documents\\My Music\\music.bmp",true );
         int x;
         int y;

         // Loop through the images pixels to reset color.
         for ( x = 0; x < image1->Width; x++ )
         {
            for ( y = 0; y < image1->Height; y++ )
            {
               Color pixelColor = image1->GetPixel( x, y );
               Color newColor = Color::FromArgb( pixelColor.R, 0, 0 );
               image1->SetPixel( x, y, newColor );

            }

         }

         // Set the PictureBox to display the image.
         PictureBox1->Image = image1;

         // Display the pixel format in Label1.
         Label1->Text = String::Format( "Pixel format: {0}", image1->PixelFormat );
      }
      catch ( ArgumentException^ ) 
      {
         MessageBox::Show( "There was an error."
         "Check the path to the image file." );
      }

   }

#6


既然返回InvalidParameter的话,那么应该就没有new成功,那么你的pBitmap应该是随机的值吧,
你怎么确定如果没有delete则会有内存泄露?

#7


LZ最好先用NULL初始化pBitmap,然后再尝试……

#8


引用 6 楼 visualeleven 的回复:
既然返回InvalidParameter的话,那么应该就没有new成功,那么你的pBitmap应该是随机的值吧,
你怎么确定如果没有delete则会有内存泄露?


debug下调试可以看到内存泄露

#9


引用 7 楼 bokutake 的回复:
LZ最好先用NULL初始化pBitmap,然后再尝试……


刚才试了,用
Bitmap *pBitmap = NULL;
pBitmap = ::new Bitmap(wszOutPath);

一样会出现那个问题。new是肯定成功了,要不然肯定无法调用GetLastStatus();

#10


引用 5 楼 bokutake 的回复:
MSDN给的例子是利用gcnew让垃圾收集机制自动释放。
C/C++ code

private:
   Bitmap^ image1;
   void Button1_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      try
      {

         // Retrieve the i……


这中方式不实用呀,在循环里面循环抛出异常,这代码没法看了。呵呵

#11


引用 9 楼 aa6052406 的回复:
引用 7 楼 bokutake 的回复:

LZ最好先用NULL初始化pBitmap,然后再尝试……


刚才试了,用
Bitmap *pBitmap = NULL;
pBitmap = ::new Bitmap(wszOutPath);

一样会出现那个问题。new是肯定成功了,要不然肯定无法调用GetLastStatus();

我测试了一下

Bitmap *pBitmap = ::new Bitmap(L"F:\\121.bmp", FALSE);
switch(pBitmap->GetLastStatus())
{
case Ok:
AfxMessageBox(_T("OK"));
break;

case InvalidParameter:
AfxMessageBox(_T("InvalidParameter"));
break;

default:
AfxMessageBox(_T("Others"));
break;
}

delete pBitmap;
pBitmap = NULL;

#12


这样也没有错误,即使AfxMessageBox显示InvalidParameter,但是回来调用delete pBitmap;没有错误的

#13


如果路径正确的,delete操作有问题吗?

#14


引用 13 楼 visualeleven 的回复:
如果路径正确的,delete操作有问题吗?


路径正确delete没问题

#15


引用 12 楼 visualeleven 的回复:
这样也没有错误,即使AfxMessageBox显示InvalidParameter,但是回来调用delete pBitmap;没有错误的


你的delete没问题?奇怪了,为啥我的delete回崩掉呢~郁闷

#16


引用 14 楼 aa6052406 的回复:
引用 13 楼 visualeleven 的回复:

如果路径正确的,delete操作有问题吗?


路径正确delete没问题

那奇怪了,我这边没有问题,不管文件路径是否正确

#17


不纠结了~以后慢慢研究这个问题,先保存路径得了

推荐阅读
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文记录了作者对x265开源代码的实现与框架进行学习与探索的过程,包括x265的下载地址与参考资料,以及在Win7 32 bit PC、VS2010平台上的安装与配置步骤。 ... [详细]
author-avatar
钟罄石
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有