【问题标题】:Coverity issue for deleting void pointer删除 void 指针的覆盖率问题
【发布时间】:2013-07-11 08:20:23
【问题描述】:

Coverity 指出了一个关于删除 void 指针的错误。代码如下:

void *pbits=(void *)new char[((bmp.bmWidth*bitspixel+31)/32)*bmp.bmHeight*4];
result=GetDIBits(pDC->GetSafeHdc(),HBITMAP(*pbitmap),0,bmp.bmHeight,pbits,bitmapinfo,DIB_RGB_COLORS);

char curdir[100];
if(!GetCurrentDirectory(100,curdir))
{
    delete [] pbits;    
    return;
}

你能帮我看看什么是不正确的,我该如何解决?

非常感谢

最好的问候

金丹

【问题讨论】:

  • 不知道为什么我们必须猜测它产生的警告。在 void* 上使用 delete[] 的可能性很高。所以不要使用 void*,char* 也可以。
  • @HansPassant 谢谢汉斯,干杯

标签: visual-studio-2010 visual-c++ coverity


【解决方案1】:

只需使用 char* 作为 pbits 的类型。

【讨论】:

    【解决方案2】:

    void * 上的 delete 实际上是未定义的;这就是该工具报告某些内容的原因。只需在将 pbits 传递给 GetDIBits 时将其转换为 GetDIBits 即可解决您的问题。

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2017-09-10
      • 1970-01-01
      • 2014-12-28
      • 2020-12-22
      • 2014-05-30
      • 2013-05-24
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多