c - 为什么段错误

标签 c pointers

以下代码块出现段错误。请帮忙。

 #include<stdio.h>
    int main(){
        int testcase,num;
        int i,j,*array;
        scanf("%d",&testcase);
        for(i=0;i<testcase;i++){
            scanf("%d",&num);
            for(j=0;j<num;j++){
                scanf("%d",(array+j));
            }
        }
        i=0;
        for(i=0;*(array+i)!='\0';i++){
            printf("%d",1);
        }
        }

最佳答案

编辑2

想把这个放在最上面。

我刚刚注意到您的代码有点奇怪。当您读取数字时,您在 i 上有一个循环,但随后在内部的 j 上有另一个循环 - 每次迭代都只是覆盖您已经读取的值。这很奇怪,我不确定你的初衷是什么。因此,虽然 segmentation fault 仍然是由于未分配的数组引起的,但我在这里写的解决方案不是正确的(并且在我理解你的意思之前我不确定什么是正确的解决方案做)

Edit2 结束

array 未初始化。

它是一个指向内存中某个地方的指针,但那个地方不是空闲的,所以当你在那里写的时候,你会覆盖重要的东西并导致段错误。

在你的情况下解决它的最好方法是添加

array=malloc(sizeof(int)*testcase);

就在你阅读 testcase 的行之后,所以就在

scanf("%d",&testcase);

此外,如果您这样做,最好在使用完内存后释放该内存。所以在你的情况下添加

free(array);

就在你打印完整个数组之后

编辑 刚刚注意到您还有另一个错误 - 在您打印数组的循环中:

for(i=0;*(array+i)!='\0';i++){

这很糟糕,因为您正在处理 array,它是一个整数数组,就像它是一个字符串一样。 “正常”数组不以 '\0' 结尾。此外 - '\0' 是一个 char,而 *(array+i) 是一个 int

将该行替换为

for (i=0;i<testcase;i++){

关于c - 为什么段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19725431/

相关文章:

php - 从 php 执行 C 代码

c - “连接”一个结构到一个字符数组

c - 数组 C 中正整数的和

c - 使用函数指针

c - 我想用指针将一些字符串放在动态二维数组中(C 编程)

c - 为什么这个简单的程序给出 "bus error"?

c - 用 C 语言解析 tzdata 数据库的工具

c++ - 删除指向 B 类型指针的 A 类型指针

c 将指针传递给处理 char 数组和数据的函数

c++ - 指向数组的指针更改数组元素的值