下面的代码显示了一个段错误。但是,当我取消引用 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。
此代码还存在一些风格问题,可能会给您带来麻烦:
- 您可能希望将
explicit
函数说明符添加到您的构造函数中,以避免从string
意外隐式转换。 - 如果保留指针字段,您几乎肯定会想要替换自动生成的构造函数(默认、复制)并实现析构函数。 (参见 Rule of Three)
关于c++ - 奇怪的段错误就在 main 的开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44172372/