这个程序有什么错误?

这是我的代码,用于查找两个信号的卷积,但每次有人解释我的代码中的错误,我的输出变为零? 我尝试编译它,但我无法找到问题,我的整个代码是正确的,提前感谢

#include #include #define array_len(x) (sizeof(x)/sizeof(double)) void convolution(double *signal, int nt, double *wind, int r, double *rm) { int i,j; printf("%u\n", sizeof(wind)); int l = (nt+r-1); for(i=r;i<=l;i++) { wind[i]=0; } for(i=nt;i<=l;i++) { signal[i]=0; } printf("signal\n"); for(i=0; i<=l; i++) { printf("%lf\n",signal[i]); } for(i=0;i<=l;i++) { rm[i]=0; for(j=0;j<=i;j++) { rm[i] = (rm[i]+(signal[j]*wind[ij]) ); } } } void main() { double a[] = {1,2,3,4}; int i; int la = array_len(a); printf("\nc1\t%ld",la); double b[] = {1,1,1,1} ; int lb = array_len(b); printf("\nc2\t%ld\n",lb); double r[la+lb-1]; int lr = array_len(r); printf("\nc3\t%ld\n",lr); printf("entering convolution\n"); convolution(a,la,b,lb,r); for(i=0;i<(lr);i++) { printf("rm[%d]=%lf\n",i,r[i]); } } 

你试试这个!

 void convolution(double *signal, int nt, double *wind, int r, double *rm) { int i,j; printf("%u\n", sizeof(wind)); // Why you do this? this just returns the size of the pointer only int l = (nt+r-1); double one[l]; double two[l]; for(i=0;i 

可能不是你为什么看到0作为答案的答案,但是,

 for(i=r;i<=l;i++) { wind[i]=0; } for(i=nt;i<=l;i++) { signal[i]=0; } 

长度变量'l'是(nb + r-1)即7,而数组传递给卷积函数,'b'和'a'只有4个元素,而内存只分配给4个元素。 因此,使用您的代码,您将跨越arrays边界以获取风和信号。 我想知道它为什么不崩溃。