c - C语言变量加值时出现段错误(核心转储)

标签 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;
}

程序运行良好,直到我向变量 x 添加值,然后运行程序,它开始出错。终端中的消息是“段错误(核心转储)”

最佳答案

首先,欢迎来到 Stack Overflow。由于这是一个国际社区,如果您的代码是用英语编写的,我们将不胜感激。例如,我可能知道您要做什么,但是使用这样命名的变量就变得很难理解。

其次,让我们看一下您的代码。我假设您正在尝试对用户在长度为 lebar 的数组中输入的所有值求和。 。在代码的第五行,您定义了一个大小为 lebar 的数组。但什么是 lebar到目前为止?

因此,您有两种选择来解决此问题:

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

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

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 ... */
}

您已经解决了数组问题。但是看看你的代码,可以看到另一个问题: jumlah 的初始值是多少? ?由于我假设您正在根据代码的第 14 行对所有输入值求和,因此我建议您初始化 jumlah for之外循环值为 0。在哪里?好吧,这由你决定。它可以在其声明中

int jumlah = 0;

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

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

关于c - C语言变量加值时出现段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49620373/

相关文章:

c - 为什么在编译驱动程序时出现这些 'undefined' 警告?

c - C中删除一个int *的内容

php - 在 PHP 中处理内存数据

c - 如何在 Linux 内核中加入多个线程

c - C 中的字符串问题

objective-c - 如何在 Objective-C 中将文本转换为驼峰式大小写?

c - 破译 while 语句

c - 为什么缩进会破坏源代码格式?

c++ - 多线程暴力和递归多维循环。其他方式?

c - C 中的 Fork() 程序