使用Linux时出现分段错误,但不在Xcode中

我在Linux环境中运行我的代码时遇到问题。 但是,它与Xcode完美运行。 我已经使用gdb backtrace来指向我的问题的地方,它指向一行代码,我设置一个节点的“入口”字段(一个string)等于从文本文件(也是一个string)读取的行。 我有一种感觉,我不包括一些东西,或者我包括错误的东西。 自从我在本月刚刚开始使用c ++以来,我一直在想我。 请帮忙!

#include <iostream> #include <fstream> // for reading dictionary.txt #include <cstdlib> // for rand() and srand() #include <time.h> // for time #include <string> // for string using namespace std; 

 struct node { string entry; // stores the dictionary entry node *next; // stores pointer to next node in list }; node *head = NULL; 

 ifstream dictionary; dictionary.open(filename); string line; if (dictionary.is_open()) { while (getline(dictionary,line)) { if (head == NULL) { node *temp = new node; temp = (node*)malloc(sizeof(node)); temp->entry = line; // this is where I segfault according to backtrace temp->next = NULL; head = temp; } // if first entry 

…和我得到使用gdb的错误:

Program received signal SIGSEGV, Segmentation fault. 0x0000003ce2a9d588 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib64/libstdc++.so.6

  node *temp = new node; temp = (node*)malloc(sizeof(node)); 

为什么是第二行? 这是你的问题的来源。 当您使用C ++对象的malloc编辑内存时,对象不会被初始化。 删除第二行,一切都应该是好的。

删除这一行

 temp = (node*)malloc(sizeof(node)) 

因为malloc不能调用字符串的构造函数,所以当你把这个行改为“some string”时,程序访问这个没有写入的内存,就会出现分段错误。 写入未写入的内存是分段错误的最主要原因。