c++ - 奇怪的段错误就在 main 的开始

标签 c++ class struct

下面的代码显示了一个段错误。但是,当我取消引用 cout << endl 时声明,它摆脱了段错误。我还放了一个没有 endl 的打印语句,它在 main() 的开头就遇到了段错误.有人可以帮我解决这个问题吗?谢谢!

#include <iostream>

using namespace std;

typedef struct node{
    string city;
    node * next;
} Node;

class Vertex{
    public:
        Vertex(string cityName) {
            x->city = cityName;
            x->next = NULL;
        }

        void printCity() {
            cout << x->city << endl;
        }

    private:
        Node * x;
};

int main() {
    //cout << endl;
    Vertex x("Phoenix");
    x.printCity();

    return 0;
}

最佳答案

您似乎没有在Vertex 构造函数中初始化x。这会导致取消引用中的未定义行为,因此它仅在某些情况下崩溃这一事实是偶然且无关紧要的。您需要先修复未定义的行为:

不是特别清楚为什么 x 是一个指针,所以考虑在它的声明中删除间接寻址。 (*) 如果有意使用指针,您需要分配一些内存来保存结构并在取消引用 x 之前用它初始化 x。

此代码还存在一些风格问题,可能会给您带来麻烦:

  1. 您可能希望将 explicit 函数说明符添加到您的构造函数中,以避免从 string 意外隐式转换。
  2. 如果保留指针字段,您几乎肯定会想要替换自动生成的构造函数(默认、复制)并实现析构函数。 (参见 Rule of Three)

关于c++ - 奇怪的段错误就在 main 的开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44172372/

相关文章:

c++ - 如何在 C++ 中重置结构体中的所有变量?

c++ - 如果对象不在集合中,则创建一个对象

c++ - 返回一个节点类

css - 给 ul 一个图片库的类,这样页面上的其他 uls 不受影响

类中的 C++ 泛型字段/属性

结构指针地址比较不起作用

c - 用c将结构写入文件

c++ - 将延时图像附加到视频文件

c++ - 带有 STL 容器的 OpenMP 嵌套循环

c++ - vector 初始化导致大量内存使用