编号后显示分段错误。列数达到 3

问题描述 投票:0回答:1

每当我选择列的长度超过 3 时,就会显示分段错误。它执行代码并显示“否”。正确的行数但限制了行数。列数仅为 3。 '''

#include<stdio.h>
int main()
{
    int i,j,r,c;
    int arr1[r][c];
    printf("Enter no. of rows in the array: ");
    scanf("%d",&r);
    printf("Enter no. of columns in the array: ");
    scanf("%d",&c);
    printf("Enter elements in %dX%d array:\n",r,c);
    for ( i = 0; i < r; i++)
    {
        for ( j = 0; j < c; j++)
        {
            scanf("%d",&arr1[i][j]);
        }
    }
    printf("Your entered array is:\n");
    for ( i = 0; i < r; i++)
    {
        for ( j = 0; j < c; j++)
        {
            printf("%d ",arr1[i][j]);
        }
        printf("\n");
    }
    printf("Transpose of the array is:\n");
    for ( i = 0; i < c; i++)
    {
        for ( j = 0; j < r; j++)
        {
            printf("%d ",arr1[j][i]);
        }
        printf("\n");
    }
}

'''

c segmentation-fault out-of-memory
1个回答
2
投票

main()
中的前两行代码是未定义的行为。

int i,j,r,c;
int arr1[r][c];

r
c
均未初始化,但您使用它们来创建二维数组
arr1
r
c
将包含一些垃圾值,可以是任何整数。如果它们为负数或
0
,则创建
arr1
将失败。如果它们是正值但非常大,创建
arr1
也可能会失败。

声明变量后,使用

scanf()
来初始化它们,但数组已经创建,因此需要切换顺序。首先创建
r
c
,然后从
scanf()
获取用户输入并用它初始化它们,然后创建二维数组
arr1

© www.soinside.com 2019 - 2024. All rights reserved.