首页 > 解决方案 > 我该如何处理这个分段错误

问题描述

我不断收到相同的消息“分段错误:11”
gdb 告诉我断点就在主函数之后。在我声明 int j 的行中;我真的不明白这怎么可能破坏代码。

此函数读取的输入仅由 1 个字符串后跟 2 个数字组成,例如

约翰 22 43 山姆 11 23

它应该做的只是将整个输入存储在“elenco”中,然后打印字符串。

首先,我创建了一个与输入匹配的结构。然后我做了一个函数,目的是读取输入并存储在变量中。然后我创建了一个函数,其变量是读取输入(所以输入)并打印给定字符串的函数的输出

谁能帮我找出问题并解决它?

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

typedef struct
{
    char name[20];
    int distance;
    int point;
}  throw;

throw *read_file(FILE *f, int *j)
{
    int i = 0;
    int c;
    int Dim = 32;
    char buf[1000];
    throw *list;

    list = malloc(Dim *sizeof(*list));
    if (list == NULL)
    {
        (*j) = 0;
        return NULL;
    }
    while (fgets(buf, sizeof(buf), f)!= NULL)
    { 
        sscanf(buf, "%19s %d %d",
        list[*j].name,
        &list[*j].distance,
        &list[*j].point);
        *j += 1;

        if ( *j >= Dim)
        {
            Dim = Dim*2;
            list = realloc(list, Dim *sizeof(*list));
            if (list == NULL)
            {
                return NULL;           
            }
        }
    }
    return list;
}

void print_everything(throw *list, int j)
{
    int c;
    for (c=0; c < j; c++ )
    {
        printf("%d\n",list[c].distance);
    }
}

int main(int argc,const char  *argcv[])
{
    int j = 0;
    FILE *file;
    throw *list;
    if (!( argc != 3))
    {
        printf("file's dimension is wrong\n");
        return -1;
    }

    file = fopen(argcv[1], "r");

    list = read_file(file, &j);

    print_everything(list, j);
    fclose(file);

    return 0;
}

输入1.txt

马里奥 20 30
乔治 30 40
马里奥 40 40
大卫 32 20
马里奥 9 32

这正是文件包含的内容

标签: cmemory-managementsegmentation-faultgdbstoring-data

解决方案


你的程序很好。您的问题在 input1.txt 中,您需要

Mario 20 30
Giorgio 30 40
Mario 40 40
Davide 32 20
Mario 9 32

使用 fgets() 阅读时,每一行都需要一个 \n


推荐阅读