是什么导致双重释放或损坏(输出)错误? [英] What causes double free or corruption (out) error?

查看:106
本文介绍了是什么导致双重释放或损坏(输出)错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能重复: OpenCV双重释放或损坏(退出):已中止(核心已转储)

我创建了一个函数,该函数将从客户端接收图像并在服务器中使用OpenCV处理图像并返回数据. 我意识到只有在使用函数 free()时才会出现此错误.下面是我函数中的代码.

I created a function that will receive image from client and use OpenCV in server to process image and return data. I have realized that I get this error only when I use function free(). Below is the code in my function.

// 2. Create Mat Image
Mat image = Mat::zeros(height, width, CV_8UC3);
uchar sockData[imageSize];

//Receive Image data here
printf("Receiving Image Data\n");
for (int i = 0; i < imageSize; i += bytecount)
{
   if ((bytecount = recv(*csock, sockData +i, imageSize - i, 0)) == -1)
   {
      fprintf(stderr, "Error receiving image %d\n", errno);
   }
}
// deallocate 
deallocateMemory(csock);

// Image Data Received, Now Reconstructing Image
printf("Image Data Received, Now Reconstructing\n");
int ptr = 0;
for (int i = 0; i < image.rows; i++)
{
  for (int j = 0; j < image.cols; j++)
  {
      image.at<cv::Vec3b>(i,j) = cv::Vec3b(sockData[ptr+0],sockData[ptr+1],
      sockData[ptr+2]);ptr = ptr + 3;
   }
}
// Write produced output to stdout - Print
printf("Image Processed, now Displaying Results...\n");
displayResultsOnConsole(results);

// free(sockData);
return 0;

当我取消注释free(sockData);时出现错误 我做错什么了吗?

The error appears when I uncomment free(sockData); Am I doing anything wrong?

推荐答案

您只能将与从malloc(或无任何作用的NULL)获得的指针完全传递给free.您违反了此规则,因此发生了不好的事情.

You can only pass to free precisely the same pointer you got from malloc (or NULL, which does nothing). You break this rule, so bad things happen.

这篇关于是什么导致双重释放或损坏(输出)错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆