在C语言中向变量添加值时的分段错误(核心转储)

-5 c

#include <stdio.h>


int main(){

    int lebar,jumlah,i;
    int siswa[lebar];
    int x;

    printf("Berapa Jumlah Siswa dalam Satu Kelas: ");
    scanf("%d",&lebar);

    for(i=0;i<lebar;i++){
        printf("Masukan Nilai siswa ke-%d: ",i+1);
        scanf("%d",&siswa[i]);
        jumlah=jumlah+siswa[i];
    }

    //When I add value to this variable, it starts error 
    x=20;

    printf("Jumlah Nilai total dari %d siswa adalah %d\n",lebar,jumlah);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序运行良好,直到我向变量x添加值然后运行程序,它开始出错.终端中的消息是"Segmentation fault(core dumped)"

woz*_*woz 5

首先,欢迎使用Stack Overflow.由于它是一个国际社区,如果您的代码是用英语编写的,我们将不胜感激.例如,我可能知道你正在尝试做什么,但是使用这样的变量变得难以理解.

其次,我们来看看你的代码.我假设你试图将用户在长度数组中输入的所有值相加lebar.在代码的第5行,您定义了一个大小的数组,lebarlebar到目前为止是什么?

因此,您有两种方法可以解决此问题:

1)lebar在创建大小数组之前声明并为其赋值lebar.

int main(){
    int lebar; //I'd call it size...
    printf("Size: ");
    scanf("%d",&lebar);
    int siswa[lebar];
    ...
}
Run Code Online (Sandbox Code Playgroud)

2)动态分配一个大小的数组lebar(你可能需要使用#include <stdlib.h>)

int main(){
    int lebar; //again, I'd call it size...
    int *siswa;
    printf("Size: ");
    scanf("%d",&lebar);
    siswa = malloc(lebar * sizeof(int));
    /* rest of your code ... */
}
Run Code Online (Sandbox Code Playgroud)

你解决了阵列问题.但是看看你的代码,可以看到另一个问题:什么是初始值jumlah?由于我假设您根据代码的第14行对所有输入值求和,我建议您使用值0 初始化jumlahOUTSIDE for循环.在哪里?嗯,这取决于你自己决定.它可以是它的声明

int jumlah = 0;
Run Code Online (Sandbox Code Playgroud)

或者在循环之外的某个地方,例如在循环之前:

int main()
{
    int jumlah;
    /* rest of your code ... */
    jumlah = 0;
    for(i = 0; i<lebar; i++){
    /* rest of your code ... */
    }
}
Run Code Online (Sandbox Code Playgroud)