在链表中插入字符串会导致分段错误

时间:2014-05-08 21:01:57

标签: c++ data-structures

我正在尝试使用字符串创建一个链接列表作为每个节点内的值,但每次我尝试调用应该向列表添加内容的函数时,它最终会给我一个分段错误错误。

这是我的代码:

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <stdlib.h> 
#include <stdio.h>

using namespace std;

struct node
{
    string data;
    struct node *next;
}*head,*var,*trav;

void add(string value)
{
      struct node *temp; 
      temp=head;
      var=(struct node *)malloc(sizeof (struct node));
      var->data =  value;
      if(head==NULL)
      {
          head=var;
          head->next=NULL;
      }
      else
      {
          while(temp->next!=NULL)
          {     
               temp=temp->next;
          }
          var->next=NULL;
          temp->next=var;
      }
}

int main(int argc, char const *argv[])
{
    add("hello");
    return 0;
}

似乎问题出现在var->data = value;中,但究竟是什么导致了这个问题呢?我怎么能解决这个问题?

这是出现的错误:

/bin/bash: line 1: 13056 Segmentation fault      (core dumped) 

2 个答案:

答案 0 :(得分:4)

malloc()不调用std::string data的构造函数,它只是一个C函数,它分配一个指定大小的块内存,内容是随机垃圾。

因此,当您随后分配给字符串时,它不仅像普通变量那样设置值 - 它调用函数std::string::operator=,它试图先释放任何先前的内容,但这不正确,它崩溃。

您需要使用C ++运算符new来创建节点,如下所示:

var = new node;

如你所见,你也不再需要丑陋的演员了。

答案 1 :(得分:-1)

我会说你忘了将head初始化为NULL