为什么我在C代码中出现分段错误?

时间:2015-09-19 13:45:45

标签: c segmentation-fault

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main()
{
    int t,i,rem,l[i],b[i];
    scanf("%d",&t);
    for (i=0;i<t;i++)
    {
        scanf("%d %d",&l[i],&b[i]);
    }

    for (i=0;i<t;i++)
    {
        if (l[i] > b[i])
        {
            rem = l[i]/b[i];
            rem +=1;
            printf("%d \n",rem);
        }
        else if (l[i] > b[i])
        {
            rem = b[i]/l[i];
            rem +=1;
            printf("%d \n",rem);
        }
        else 
        {
            printf("1 \n");
        }
    }

    return 0; 
}

我的代码正在编译但由于分段错误而未运行。请帮我弄清楚它是否会成为一些内存问题或scanf语句

1 个答案:

答案 0 :(得分:0)

下面:

int t,i,rem,l[i],b[i];

i未初始化,您正在创建大小为i的数组(目前i的值是多少?)。数组具有固定的大小,当i的值发生变化时,它不会改变。

通过更改

解决问题
int t,i,rem,l[i],b[i];

int t, i, rem;

并添加

int l[t], b[t]; /* You want arrays of `t` size */

scanf("%d",&t);

以便在创建VLA(可变长度数组)时初始化t