分段使用Linux时出错,但在Xcode中没有

时间:2014-11-29 07:06:09

标签: c++ linux xcode linked-list nodes

我在Linux环境中运行代码时遇到问题。但是,它与Xcode完美搭配。我已经使用gdb backtrace来指出我的问题在哪里,它指向一行代码,我设置一个节点的“entry”字段(一个字符串)等于从文本文件(也是一个字符串)读取的行。我有一种感觉,我没有包括某些东西,或者我包含了错误的东西。自从我本月刚刚开始使用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

2 个答案:

答案 0 :(得分:3)

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

为什么第二行?这是你问题的根源。将malloc内存与C ++对象一起使用时,不会初始化对象。删除第二行,一切都应该很好。

答案 1 :(得分:1)

删除此行

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

因为malloc不能调用字符串的构造函数,所以当你对行=&#34;某些字符串&#34;,程序访问未写入的内存时,会出现分段错误。 写下未写入的内存是分段错误的最主要原因。