打印链表返回随机符号



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

在 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���

@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();

在主(( 文件中

最新更新