c -在使用OpenCV数据结构时堆损坏



我使用OpenCV 2.1与代码块(gcc under mingw)。在我的代码中,我试图(出于某种同样的原因)直接访问IplImage数据结构中的图像数据。详细信息请参考代码片段:

int main(void)
{
    IplImage* test_image = cvLoadImage("test_image.bmp",CV_LOAD_IMAGE_GRAYSCALE);
    int mysize = test_image->height * test_image->widthStep;
    char* imagedata_ptr = NULL;
    int i   =   0;    
    imagedata_ptr = test_image->imageData;
    char* temp_buff = (char *)malloc(sizeof(mysize));
    memcpy(temp_buff,imagedata_ptr,mysize);
    free(temp_buff);
}

当我运行这段代码时它崩溃了。在调试模式下运行它时,由于堆损坏,它会生成SIGTRAP。起初,我怀疑这可能是编译器相关的问题,因此尝试在Visual Studio中运行相同的代码。但它仍然会崩溃。这就是为什么我觉得这可能是一个与OpenCV相关的问题。

注意:没有其他程序实例打开,这是我正在运行的唯一代码,没有线程等在这里完成。

等待您的评论。

问候,Saurabh甘地

您没有分配足够的内存,这:

char* temp_buff = (char *)malloc(sizeof(mysize))

只分配sizeof(int)字节(可能是4个),这可能比您需要的要少得多。然后之后的memcpytest_image->height * test_image->widthStep字节的数据复制到只有sizeof(int)字节空间的地方,现在您已经在内存中乱涂乱画并损坏了堆。

我猜你是真的想说:

char *temp_buff = malloc(mysize);

不要强制转换malloc的返回值,你不需要它,它会隐藏问题。

相关内容

  • 没有找到相关文章

最新更新