For循环中的分段错误

时间:2012-09-14 11:17:46

标签: c opencv for-loop segmentation-fault

我有以下代码,在执行几次后继续给出分段错误。

//pasting second image
for(n32i=0;n32i<(SrcImageHeight2);n32i++)
{
  //printf("\n%di",i);
  for(n32j=0;n32j<(SrcImageWidth2);n32j++)
  { 
    int x=n32j;
    int y=n32i;  

    CvMat *tempMatrix1 = cvCreateMat(3,1,CV_32FC1);
    printf("\n Here ,  %d , %d , %d , %d ,%d ,%d , x = %d , y = %d" , n32k , n32j , n32i , SrcImageChannels2 , SrcImageWidth2 , SrcImageHeight2 , x, y);        
    CV_MAT_ELEM(*tempMatrix1, float,0,0) =x;
    printf("\n There ,  %d , %d , %d , %d ,%d ,%d" , n32k , n32j , n32i , SrcImageChannels2 , SrcImageWidth2 , SrcImageHeight2);        
    CV_MAT_ELEM(*tempMatrix1, float,1,0) =y;
    CV_MAT_ELEM(*tempMatrix1, float,2,0) =1;
    cvMatMul(matrixH,tempMatrix1,tempMatrix1);
    x=*((float *)CV_MAT_ELEM_PTR(*tempMatrix1,0,0))/ *((float *)CV_MAT_ELEM_PTR(*tempMatrix1,2,0));
    y=*((float *)CV_MAT_ELEM_PTR(*tempMatrix1,1,0))/ *((float *)CV_MAT_ELEM_PTR(*tempMatrix1,2,0));

    for(n32k=0;n32k<(SrcImageChannels2);n32k++)
    {   
        if(DstImageData[(y+h)*DstImageStep+(x+w)*DstImageChannels+n32k] ==0)
        {   
          DstImageData[(y+h)*DstImageStep+(x+w)*DstImageChannels+n32k]=SrcImageData2[n32i*SrcImageStep2+n32j*SrcImageChannels2+n32k];
        }
    }
  }
}

错误出现在行CV_MAT_ELEM(*tempMatrix1, float,0,0) =x;上,我不明白它为什么会发生,因为它只是一个赋值,并且适用于早期执行(即错误之前的执行)。

1 个答案:

答案 0 :(得分:2)

听起来好像cvCreateMat()进行动态内存分配,但你没有:

  1. 检查是否成功
  2. 完成后释放它。
  3. 这些都很糟糕,它们一起非常糟糕。