1
我正在使用OpenCV 2.1和代码块(gcc在mingw下)。在我的代码中,我试图(为了某种理智的原因)直接访问IplImage数据结构中的图像数据。请参阅代码片段以获取更多详细信息:使用OpenCV数据结构时发生堆损坏
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甘地
天哪......我现在意识到我的问题的愚蠢以及我错过了什么......你还是让我的星期天......非常感谢! –
umm'不要从malloc投下返回值,除非你被迫编译:) :) 比尔盖茨说: 错误C2440:'初始化':无法从'void *'转换为'char *' 1>从'void *'转换为非'空'的指针需要明确的转换 – Ulterior
@ user757808:“'void'转换为'char *'或''void *'转换为'char *'”?第一个意味着你错过了一个头文件,第二个意味着你的编译器坏掉了(或者是C++模式),因为你不需要从'void *'显式强制转换为C中的其他非函数指针类型 –