为什么这个c程序给出运行时错误

我的程序是采取整数输入并将奇数负数的加数加到偶数正数但我得到运行时错误,任何人都可以找到错误。

#include  int main(void) { int i,j,m,n,a[m],w; scanf("%d",&n); for(i=0;i<n;i++) { int s=0,d=0; scanf("%d",&m); for(j=0;j<m;j++) { scanf("%d",&a[j]); if((a[j]0)&&(a[j]%2==0)) d=d+a[j]; } printf("%d",s+d); } return 0; } 

在你的代码中

 a[m] 

是错误的。 m值用作未初始化的。

要解决您的问题,您可以根据m的用户输入为变量int * a使用动态内存分配。

注意:

  1. 始终初始化本地变量。
  2. 检查scanf()的返回值是否成功输入。
  3. [请求] C忽略[大多数]空格。 使用它们可以使您的代码更具人性化

你的错误是这样的: int a[m]

您期望m价值是多少? 改为a[256] 。 或者在扫描m之后定义int *aa = malloc( m * sizeof (int) )

如果你想

 a[m]; 

从C99你有VLA

 int m; scanf("%d",&m); int a[m]; 

因为我在您的代码中看到您正在尝试扫描数组的大小。

或者,您可以拥有动态数组

 int *a = malloc(sizeof(int) * m); 

@Sourav已经提到了崩溃的原因。

m的值是不确定的。

数组声明导致运行时错误请参考http://www.tutorialspoint.com/cprogramming/c_arrays.htm