使用OpenCV数据结构时堆积损坏

Sau*_*dhi 1 c gcc opencv mingw

我正在使用带有代码块的OpenCV 2.1(mingw下的gcc).在我的代码中,我正在尝试(出于某种理智的原因)直接访问IplImage数据结构中的imagedata.请参阅代码段以获取更多详细信息:

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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

等待你的评论.

问候,

Saurabh Gandhi

mu *_*ort 6

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

char* temp_buff = (char *)malloc(sizeof(mysize))
Run Code Online (Sandbox Code Playgroud)

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

我猜你真的想说这个:

char *temp_buff = malloc(mysize);
Run Code Online (Sandbox Code Playgroud)

并且不要转换返回值malloc,你不需要它,它可以隐藏问题.