C编程错误.2Darrays

时间:2015-06-30 17:31:44

标签: c

我有下面的代码。问题是我正在使用带有行和2列的二维数组。第一列用于存储值,第二列用作标志。当我初始化标志值时出现问题也受到了影响。

#include<stdio.h>
    int main()
    {
        int a,b;
        scanf("%d%d",&a,&b);
        int arr[a][1];
        int i,j,k,sum=0;

        for(i=0;i<a;i++)
        {

            scanf("%d",&arr[i][0]);
        }
        for(i=0;i<a;i++)
        {

            printf("%d\n",arr[i][0]);
        }

        for(j=0;j<a;j++)
        {

           arr[j][1]=0;
        }
     for(i=0;i<a;i++)
        {

            printf("%d\n",arr[i][0]);//Different Values
        }
    }

3 个答案:

答案 0 :(得分:3)

int arr[a][1];只有一列而不是两列。您应该使用

  int arr[a][2];

答案 1 :(得分:2)

在这里你写越界

arr[j][1]=0;

这是因为你只用一个元素写入数组的第二个元素。

arr[x](任何有效的x)的大小只有一个。

写出越界导致undefined behavior

答案 2 :(得分:2)

你的数组应该是这样的:

arr[row][col] where row denotes the number of rows and col the no of coloumns.

因此arr [a] [1]是一行和一列的数组,因此你的代码工作错误。

你的数组应该是[a] [2]。这意味着arr是一个包含行和2个coloumn的数组。同样,你必须在整个代码中更改另一个arr [] []&#39。