【问题标题】:Segmentation fault as soon as i run my code. Seems like problem with arrays一旦我运行我的代码,就会出现分段错误。似乎是数组的问题
【发布时间】:2021-01-04 05:07:25
【问题描述】:

我编写了提示用户输入数字的代码,然后告诉该数字的哪些数字是重复的。
虽然编译没有问题,但运行时显示分段错误(核心转储)。

代码:

 #include <stdio.h>

 int main(void)
 {
    int n=0;
    int digit[n];
    int t;
    
    for (int num = 0;num<10;num++)
    {
        digit[num] = 0;
    }
    
    scanf("%d",&t);
    int y=t;
    int c = 0;
    
    do
    {
        c++;
        y = y/10;
    }while(y>0);
    
    int ko;
    
    for (int no=0;no<c;no++)
    {
        ko = t%10;
        digit[ko]++;
        t=t/10;
    }
    
    int count = 0;
    
    for (int co = 0;co<10;co++)
    {
        if (count>0)
            printf(" ");
    
        if (digit[co]>1)
        {
            printf("%d",co);
            count ++;
        }
    }
 }

【问题讨论】:

  • int n=0; int digit[n]; 创建一个可以存储 0 个元素的数组。至少需要int digit[10];
  • int n=0; int digit[n]; 但为什么呢?

标签: c segmentation-fault


【解决方案1】:

问题出在这里:

int n=0;
int digit[n];

这使得 digit 成为一个 0 ints 的数组,这不是您所需要的。 看着

for (int num = 0;num<10;num++)
{
    digit[num] = 0;
}

这让我觉得你需要迭代超过 10 个数组元素。 就这样吧,

int digit[10];

或者甚至更好地定义一个宏并在其他地方使用它。

#define LIMIT_ARRAY_ELEMENTS (10)

然后

int digit[LIMIT_ARRAY_ELEMENTS];

for (int num = 0; num < LIMIT_ARRAY_ELEMENTS; num++)

您看到的分段错误是因为您没有为您尝试执行的操作分配足够的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2021-01-03
    相关资源
    最近更新 更多