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
你没有分配足够的内存,这个:
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,你不需要它,它可以隐藏问题.
| 归档时间: |
|
| 查看次数: |
798 次 |
| 最近记录: |