为什么我会遇到分段失败? [英] Why am I getting a segmentation failure?

查看:47
本文介绍了为什么我会遇到分段失败?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码.我正在做一些处理文件的 C 练习

Here is my code. I am doing some C practice for processing a file

我不认为结构定义是问题,但我也发布了它以提供一些上下文.

I don't think the struct definition is the problem but I post it as well to give some context.

 typedef struct carType Car;
struct carType {
   int vehicleID;
   char make[20];
   char model[20];
   int year;
   int mileage;
   double cost;
   Car *next;
};

我认为是导致分段失败的功能.

And the function that i think is causing the segmentation failure.

 void TextLoad(Car *headPointer)
   {
         char fileName[20];
         //prompt user for name of textfile to print to 
        scanf("%s", fileName);
        FILE *fpt;
        //estabish an IO connection
        fpt = fopen(fileName, "r");
        //current car to be printed
        Car *current;
        current = headPointer->next;
        while(fscanf(fpt,"%d %s %s cost:$%f mileage:%d, vehicleID:%d",&current->year,
    current->make, current->model,&current->cost,&current->mileage, &current->vehicleID) != EOF) 
        {
             current = current->next;
        }
        fclose(fpt);
    }  

我测试这个功能的文件有这个内容

The file that I tested this function had this content

 2014 Toyota Celica cost:$90000 mileage:5000, vehicleID:1
 2014 Toyota Rav4 cost:$4500 mileage:4000, vehicleID:2

我所拥有的基本上是一个结构汽车,我想使用文件中的信息来初始化结构汽车的字段.有谁知道这个分段失败是从哪里来的?我检查了其他线程 fclose() 导致分段错误,以及 代码因分段错误而失败 但我确保调用 fclose 来关闭 IO 连接并且我没有初始化另一个文件指针,但效果很好.我认为问题出在 fscanf 上,但我有正确的格式,不是吗?

What I have is basically a struct car and I want to use info from the file to initialize the fields of the struct car. Does anyone know where this segmentation failure is coming from? I checked on other threads fclose() causing segmentation fault, and Code fails with segmentation fault but I made sure to call fclose to close the IO connection and I didn't initialize another file pointer but that worked fine. I think the problem is the fscanf but I have the right format don't I?

推荐答案

在我看来,您没有为汽车结构分配空间.您创建了一个指针,但随后您必须使用 malloc 为其创建内存.我认为您可以使用 sizeof(carType) 作为 malloc 的参数来获取结构的大小.自从我像这样直接使用 c 以来已经有一段时间了,在 C++ 和 C# 中,您可以使用 new 来调用构造函数,而编译器会进行内存管理.

It looks to me like you are not allocating space for the car struct. You create a pointer, but then you must create memory for it using malloc. I think you can get the size of your struct with sizeof(carType) as the argument for malloc. It's been a while since I used straight c like this, in C++ and C# you can just use new to call a constructor and the compiler does the memory management.

所以它看起来像这样:

Car *current = malloc(sizeof(carType));//you might want to try sizeof(car) if that doesn't work

这篇关于为什么我会遇到分段失败?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆