【问题标题】:Printing Linked List returns random symbols打印链表返回随机符号
【发布时间】:2018-01-27 19:59:13
【问题描述】:

我已经实现了一个基本的链表,以便为更难的任务做准备。如果不打印随机符号,我似乎无法打印节点的内容。
我知道这意味着我正在访问错误的内存,但我无法确定它发生在哪里或如何发生。
有人可以帮我解决这个错误吗?

在 linux 上使用 g++ 构建

头文件

#ifndef LLIST_H
#define LLIST_H

#include <string>
using namespace std;

struct node
{
        int age;
        string name;
        string hair;
        int height;
        node* next;
};

node loadNode(node a, string b);


class linkedlist 
{
    private:
        node* head = NULL;
        node* tail = NULL;
        int size;
    public:
        linkedlist();
        linkedlist(node* n[], int si);
        int getSize();
        void print();
        void addNode(node add);
        void del(string record);
        node sort(node sortee);
        void printList();
        node * getHead();
};
#endif

实施

#include "list.h"
#include <iostream>
#include <sstream>
#include <string>


node loadNode(node a, string b)
{
    int counter = 0;

    string ag = "";
    string nam = "";
    string hai = "";
    string hei = "";


    for(int i = 0; i < b.length(); i++)
    {
        if(b[i] == ',')
        {
            counter++;
            i++;
        }
        if(counter == 0)
            ag = ag + b[i];
        else if(counter == 1)
            nam = nam + b[i];
        else if(counter == 2)
            hai = hai + b[i];
        else
            hei = hei + b[i];
    }

    stringstream s(hei);
    stringstream o(ag);

    int f,g;
    s >> f;
    o >> g;

    a.hair = hai;
    a.height = f;
    a.age = g;
    a.name = nam;

    return a;

}

linkedlist::linkedlist()
{
    head = NULL;
    tail = NULL;
    size = 0; 
}

linkedlist::linkedlist(node a[],int si)
{
    head = NULL;
    tail = NULL;
    size = 0;

    for(int i = 0; i < si; i++)
    {
        addNode(a[i]);
    }

}

void linkedlist::addNode(node added)
{
    node * pointer = new node;
    //if the first element
    if(size == 0)
    {
        tail = pointer;
        pointer->next = NULL; 
    }
    pointer->next = head;
    head = pointer;

    //add data members 
    pointer-> age = added.age;
    pointer-> hair = added.hair;
    pointer-> name = added.name;
    pointer-> height = added.height;

    size++;

    //time to exit!
    pointer = NULL;
    delete pointer;
}

node *  linkedlist::getHead()
{
    node * temp = head;
    return temp;
}

void linkedlist::print()
{


    node* iterator = (node*)malloc(sizeof(node));
    iterator = head;

    while(iterator != NULL)
    {
        printNode(iterator);
        iterator = (iterator->next);
    }
    iterator = NULL;
    delete iterator;
}

void printNode(node* printed)
{
    cout << printed->name << endl;
    cout << printed->age << endl;
    cout << printed->height << endl;
    cout << printed->hair<< endl;
}

主程序

#include "list.h"
#include <fstream>
#include <iostream>

using namespace std;

int main()
{
    string k = "21,Ces Goose,brown,5";  
    string a = "25, SteveO, Brown, 6";
    string b = "23, Jimmy , Brown, 5";



    node d,f,c;
    d = loadNode(d,k);
    f = loadNode(f,a);
    c = loadNode(c,b);

    node lib[3] = {d,f,c};
    linkedlist doublel = linkedlist(lib, 3);

    doublel.print();



    return 0;


}

我得到的输出是:

6304000
@g���

【问题讨论】:

  • 您是否尝试使用调试器单步执行您的代码?
  • 是时候在调试器中启动您的程序,逐行执行,检查所有变量和指针值是否按预期显示。
  • linkedlist::addNode 中的逻辑没有任何意义。你需要审查它
  • @C.M.你能说得更具体一点吗,是哪一部分?或者是我执行步骤的顺序
  • 你要求我为你做作业 :-) 你在addNode 所做的大部分事情都没有意义。分析它并找出问题所在

标签: c++ linked-list adt singly-linked-list


【解决方案1】:

@C.M.如果这能解决问题,请告诉我

void linkedlist::addNode(node added)
{
    node * temp = new node;
    //add data members 
    temp-> age = added.age;
    temp-> hair = added.hair;
    temp-> name = added.name;
    temp-> height = added.height;

    //if the first element
    if(size == 0)
    {
        head = temp;
        tail = temp;
        temp->next = NULL; 
        size++;
    }
    else
    {       
        temp->next = head;
        head = temp;
        size++;

        //time to exit!
        temp = NULL;
        delete pointer;
    }
}

也改变了linkedlist doublel = linkedlist(lib, 3);到

linkedlist * doublel = new linkedlist(lib,3);
doublel->print();

在 main() 文件中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多