-6

これは2つの信号の畳み込みを見つけるための私のコードですが、私のコードの間違いを誰かが説明できるたびに出力がゼロになっていますか? 私はそれをコンパイルしようとしましたが、コード全体が正しいという問題が何であるかを見つけることができません 事前に感謝します

#include<stdio.h>
#include<stdlib.h>
#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[i-j]) );
            }   
        }
}



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]);
    }
}
4

2 に答える 2

0

なぜ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 つの要素だけを収容するためにのみ割り当てられます。したがって、コードでは、風と信号の配列境界を越えています。なぜクラッシュしないのだろうか。

于 2013-05-27T09:57:32.547 に答える