cin到链表核心转储

时间:2014-02-14 20:43:32

标签: c++ linked-list cin

我在c ++中遇到cin的问题。我正在尝试将cin文本文件添加到程序中,然后将所有单词等放在链接列表中,但我遇到temp->next部分的问题,核心被转储

string x = ""; //ordet blir lagret her
string y = stopwords_c;
string tegnfjern = stopchars_c;

int antallOrd = 0;

struct ord{
string ordet;
int ant;
};

struct node{
node* next;
ord o;
};

int main(){

    node* ord = new node;
    node* temp = ord;


while(cin >> x)
{
    if(temp == NULL)
    {
        temp->o.ant++;
        temp->o.ordet =x;
        antallOrd++;
    }

    else
    {
        while(temp->next != NULL && temp->o.ordet != x)
        {
            temp = temp->next;
        }

        if(temp->o.ordet == x)
        {
            temp->o.ant++;
        }

        else
        {
            if (cin >> x)
            {
                temp->next = new node;
                temp = temp->next;
            }

            temp->o.ordet = x;
            temp->o.ant++;
        }

        temp = ord;                
    }
}

1 个答案:

答案 0 :(得分:1)

首先检查是否if(temp == NULL),如果是,那么您仍然想要访问它的成员。那不行。如果tempNULL,则必须创建新的节点结构并将其添加到列表中(具体取决于temp精确表示的内容)。所以有关节点结构和列表的更多信息会很棒。

修改 让我总结一下你应该做些什么:

  • 将默认构造函数添加到初始化ant0nextNULL(或nullptr,如果您可以使用新标准)的结构。
  • 正如已多次提到的:摆脱试图访问nullptr成员的代码。
  • 只需删除if (cin >> x)即可。您不需要它,因为您忽略在循环条件中读入x的旧值(此外如果cin >> x失败则覆盖现有条目)。但只有条件本身 - 而不是在其中执行的代码:你肯定需要代码,因为它创建了新节点来存储新单词。如果您不知道如何发生,请用方框和箭头画一幅画。

如果你做了所有它应该工作 - 至少它然后为我工作。此外:

  • 我希望您知道此列表中存在某种类型的sentinal:使用node* ord = new node;创建的元素始终保留在列表中,并计算字符串""的所有出现次数。你必须注意这一点(特别是在释放列表中的元素时)。
  • 我会将两个结构合并到一个结构中,因为它使代码更具可读性(至少在我看来)。
  • 不要忘记妥善释放您的清单!