【问题标题】:C++ Segmentation fault while printing the elements of the struct in the linked list打印链表中结构的元素时出现C++分段错误
【发布时间】:2020-12-03 22:51:06
【问题描述】:

当我在链表中​​有超过 2 个结构时,编译器会给我分段错误。

我有一个结构体Car,其中包含有关汽车的信息

struct Car {
        string name;
        string color;
        int serialNumber;
        int regestrationNumber;
        int yearMade;
        int yearInspection;
        int price;
};

我有一个链表

struct Node {
    Car obj;
    struct Node* next;
};

我这样声明:

struct Node* head = NULL;

我用这个代码块收集信息

    cout << "name: " ;
    getline(cin, newCar[size].name);
    cout << "color: ";
    getline(cin, newCar[size].color);
    cout << "serial number: ";
    cin >> newCar[size].serialNumber;
    cout << "regestration number: ";
    cin >> newCar[size].regestrationNumber;
    cout << "year made: ";
    cin >> newCar[size].yearMade;
    cout << "inspection year: ";
    cin >> newCar[size].yearInspection;
    cout << "price: ";
    cin >> newCar[size].price;
    cin.get();

我将所有这些信息添加到结构并使用此函数将该结构推送到链表

void push(struct Node** head, Car node_obj)
{
    Node* newNode = newNode;
    newNode->obj = node_obj;
    newNode->next = (*head);
    (*head) = newNode;
}

现在是有趣的部分: 我使用函数void output(Car strk, int first)来打印这样的结构内容(output()基本上是三个printf()函数)

while (headCopy != NULL) {
    output(headCopy->obj, first);

    headCopy = headCopy->next;
    first = 1;
}

现在,当链表中包含超过 2 个元素时,它会显示除第一个元素之外的所有元素,其中显示 segmentation fault。 我认为问题是到最后headCopy = headCopy-&gt;next; 根本没有指向任何东西,但话说回来,当它有 1 或 2 个元素时为什么不给我那个错误。

【问题讨论】:

  • Node* newNode = newNode; 是错误的。你的意思是Node* newNode = new Node;
  • Hack 技巧:push 可以通过引用来消除引用并利用 Aggregate Initialization 并减少到 void push(struct Node*&amp; head, Car node_obj) { head = new Node {node_obj, head}; }
  • @user4581301 - 这很聪明 - 最短的 forward-chaining 加上 :)
  • 聪明,但不够聪明,无法避免连续两个“和”的歧义。该死的英语。
  • @MikeVine 是的,你完全正确,谢谢

标签: c++ arrays struct linked-list


【解决方案1】:

正如@mike vine 所说,问题出在线路上

Node* newNode = newNode;

我应该在哪里输入

Node* newNode = new Node;

非常愚蠢的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 2013-01-01
    • 2017-11-12
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多