0
由於聲明的問題,我被我的程序卡住了。當我在將一個計算值分配給一個數組之前或之後放置printf語句時,我得到正確的答案。否則,這是一個奇怪的數字。這個數字是相當一致的,但。 printf不必包含與數組相關的任何內容。我檢查了這個answer,但沒有得到太多。下面是我的代碼部分:printf()會影響c中的一個變量的情況是什麼?
int xcorr(Imdata, Kernel, sizeIm, sizeKernel, result_im)
unsigned short** Imdata;
unsigned short** Kernel;
long sizeIm[2], sizeKernel[2];
float** result_im;
{
register float Imstd, Imavg, Kernelstd, Kernelavg, combine_avg, outtmp, area;
register int bufYsize, bufXsize;
int i,j,r,c;
register unsigned short *ImdataPtr, *KernelPtr;
register float *result;
register float val1, val2;
// kernel average and standard deviation are constant throughout this function
area = sizeKernel[0]*sizeKernel[1];
outtmp = Kernelavg = 0;
// Using the One-pass standard variance algorithm
for(i=0;i<sizeKernel[0];i++){
KernelPtr = Kernel[i];
for(j=0;j<sizeKernel[1];j++){
val1 = KernelPtr[j];
Kernelavg += val1;
outtmp += val1*val1;
}
}
Kernelavg /= area;
outtmp /= area;
// now the standard deviation
Kernelstd = sqrt(outtmp - Kernelavg*Kernelavg);
/////////////////////////////////////////////////
// Perform Correlation
/////////////////////////////////////////////////
bufYsize = sizeIm[0] - sizeKernel[0] + 1;
bufXsize = sizeIm[1] - sizeKernel[1] + 1;
for(i=0;i<bufYsize;i++){
result = result_im[i];
for(j=0;j<bufXsize;j++){
combine_avg = outtmp = Imavg = 0;
// Using one-pass method for standard variance:
for (r = 0; r < sizeKernel[0]; r++){
KernelPtr = Kernel[r];
ImdataPtr = Imdata[i+r];
for (c = 0; c < sizeKernel[1]; c++){
val1 = KernelPtr[c];
val2 = ImdataPtr[j+c];
Imavg += val2;
outtmp += val2*val2;
combine_avg += val1*val2;
}
}
outtmp /= area;
Imavg /= area;
// standard deviation
if((Imstd = outtmp - Imavg*Imavg)<=SMALL_VAR){
result[j] = 0;
continue;
}
Imstd = sqrt(outtmp - Imavg*Imavg);
combine_avg /= area;
result[j] = (float)combine_avg-(Imavg*Kernelavg))/(Kernelstd*Imstd);
}
}
return 0;
}
錯誤與結果,這是在主要分配如下:
result = (float**)malloc(bufYsize*sizeof(float*));
if(result == NULL){
printf("Error allocating the output array (pair num=%d)\n",k+1);
xit_status = 1; //exit(EXIT_FAILURE);
}
else{
for(i=0;i<bufYsize;i++){
result[i]=malloc(bufXsize*sizeof(float));
if(result[i]==NULL){
printf("Error allocating the output array at row %d, pair %d\n",i,k+1);
exit_status = 1; //exit(EXIT_FAILURE);
}
}
}
聽起來像你在某處訪問該數組越界,否則覆蓋堆棧。 –
Printf應該只會引起與從數據讀取相關的效果。並寫入文件。也許顯示一些代碼,所以少投機是必要的? – wallyk
在將值賦給變量之前,是否有可能嘗試打印變量的值? – mti2935