gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:52 26 4
gpt4 key购买 nike

我正在使用带有代码块的 OpenCV 2.1(mingw 下的 gcc)。在我的代码中,我试图(出于某种理智的原因)直接访问 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);
}

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

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

等待您的评论。

问候,

苏拉布·甘地

最佳答案

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

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

仅分配 sizeof(int) 字节(可能是 4),这可能比您需要的少很多。然后 memcpy紧接着会将 test_image->height * test_image->widthStep 字节的数据复制到只有 sizeof(int) 字节空间的地方,你现在已经到处涂鸦了你的内存并破坏了你的堆。

我猜你真的想这样说:

char *temp_buff = malloc(mysize);

并且不要强制转换 malloc 的返回值,您不需要它,它可以隐藏问题。

关于c - 使用 OpenCV 数据结构时堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com