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 に答える