我有以下代码,在执行几次后继续给出分段错误。
//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;
上,我不明白它为什么会发生,因为它只是一个赋值,并且适用于早期执行(即错误之前的执行)。
答案 0 :(得分:2)
听起来好像cvCreateMat()
进行动态内存分配,但你没有:
这些都很糟糕,它们一起非常糟糕。