是什么导致双重免费或腐败(出)错误?

时间:2017-02-21 10:49:33

标签: c++ sockets opencv

可能重复: OpenCV double free or corruption (out): Aborted (core dumped)

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

// 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);时出现错误 我做错了吗?

2 个答案:

答案 0 :(得分:2)

您只能从free(或malloc获得与NULL完全相同的指针传递给public function getRelation() { return $this->hasOne(RelationTable::className(), ['id' => 'relation_id'])->onCondition(array|string)->andOnCondition(array|string); } 。你违反了这个规则,所以发生了不好的事情。

答案 1 :(得分:1)

嗯。你在堆栈上分配,并希望在堆上解除分配?

你设法添加在堆栈上分配的这个大块? - &GT;不用担心。

在堆栈上分配图像字节的不良做法,因为这通常很大。 - &GT;在堆上分配,从堆中释放。