2013-05-28 113 views
-5

我正在使用code :: blocks,当我编译这个程序时,它没有显示任何错误,但是当我运行它时,它说convolution.exe已停止工作(即,我将它保存为convolution.c)知道发生了什么,任何人都可以帮我这个问题,我的代码如下我的功能有什么问题?

#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; 
    double copy[nt]; 
    for(i=0; i<nt; i++) 
    { 
     copy[i] = signal[i]; 
    } 

    int l = (nt+r-1); 
    for(i=r;i<=l;i++) 
    { 
     wind[i]=0; 
    } 
    for(i=nt;i<=l;i++) 
    { 
     copy[i]=0; 
    } 
    for(i=0;i<=l;i++) 
    { 
     rm[i]=0; 
     for(j=0;j<=i;j++) 
     { 
     rm[i] = (rm[i]+(copy[j]*wind[i-j])); 
     } 

    } 
} 

void main() 
{ 
    double a[1020]; 
    int i; 
    for(i=0; i<1020; i++) 
    { 
     a[i] = 1; 
    } 
    int la = array_len(a); 
    printf("\nc1\t%d",la); 

    double b[1020]; 
    for(i=0; i<1020; i++) 
    { 
     b[i] = 1; 
    } 
    int lb = array_len(b); 
    printf("\nc2\t%d\n",lb); 

    double r[la+lb-1]; 
    int lr = array_len(r); 
    printf("\nc3\t%d\n",lr); 

    printf("entering convolution\n"); 
    convolution(a,la,b,lb,r); 
    printf("in main\n\n"); 

    for(i=0;i<(50);i++) 
    { 
     printf("rm[%d]=%lf\n",i,r[i]); 
    } 

} 
+0

http://stackoverflow.com/questions/16770078/what-is-the-mistake-in-this-program – Jeyaram

+4

您需要使用*调试器*,而不是堆栈溢出。一旦你使用调试器缩小了错误,并且* still *无法弄清楚如何解决这个问题,那么只能转向Stack Overflow。 –

+2

您可能应该学习如何使用调试器 - 一步一步调试并查看它崩溃的位置 – mvp

回答

1

其他一些问题:

printf正在寻找long int但你传递int。在main()函数中将%ld更改为%d

更新main()不被void,但有一个int返回类型(如int main()),也刚刚结束括号(通常return 0;放在案件的执行进展顺利)之前在年底返回的东西。

编辑:我只是想提一下,这些东西,你可以通过照顾编译器打印的警告(我敢肯定他们在那里)很容易修复。

编辑:这是印有启用(我使用的是Linux下GCC)-Wall-Wextra标志什么我的编译器:

test.c: In function ‘main’: 

test.c:43:3: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘int’ [-Wformat] 

test.c:51:3: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘int’ [-Wformat] 

test.c:55:3: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘int’ [-Wformat] 

test.c:34:6: warning: return type of ‘main’ is not ‘int’ [-Wmain] 
+0

感谢您的信息,但编译时我没有收到任何警告 –

+0

这很奇怪,您使用的编译器是什么? Cygwin的?我更新了我的帖子,看我的编辑。 – Nobilis

0

你的问题已经回答了here。 无论如何,问题是你访问你的数组越界。请注意不要访问在初始化/声明时给出的大小内的数组。为了解决你的问题,修改功能convolution如下:

void convolution(double *signal, int nt, double *wind, int r, double *rm) 
{ 

    int i,j; 
    int l = (nt+r-1); 
    double signal1[l]; 
    double signal2[l]; 
    for(i=0; i<l; i++) 
    { 
     if (i < nt) 
      signal1[i] = signal[i]; 
     else 
      signal1[i] = 0; 
     if (i < r) 
      signal2[i] = wind[i]; 
     else 
      signal2[i] = 0; 
    } 
    for(i=0;i<=l;i++) 
    { 
     rm[i]=0; 
     for(j=0;j<=i;j++) 
     { 
     rm[i] = (rm[i]+(signal1[j]*signal2[i-j])); 
     } 
    } 
}