1

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

//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;,我不明白它为什么会发生,因为它只是一个赋值,并且对于早期执行(即在错误之前执行)工作正常。

4

1 回答 1

2

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

  1. 检查它是否成功
  2. 完成后释放它。

这两者都很糟糕,它们加在一起非常糟糕。

于 2012-09-14T11:29:25.760 回答