@frilix
Иногда "творю"

Что не так с классом?

Здравствуйте, пишу курсач, но вот застрял на пустом месте и не могу двинуться дальше. У меня есть список который хранит указатели на строковые Констаны. Проблема заключается в том, что при выводе текста появляются каркозябры и именно при выводе 3 строки , что весьма странно.

Реализация списка:

#include "List.h"

List::~List()
{
   ClearList();
}

void List::ClearList()
{
    allNumber = 0;
    while (head)
    {
        tail = head->next;
        delete head;
        head = tail;
    }
}

int List::GetAllNumber()
{
    return allNumber;
}

void List::Add( const char * pointer )
{
    Node *temp = new Node;
    temp->next = NULL;
    temp->currentID = allNumber;
    temp->str = pointer;

    if (head != NULL)
    {
        temp->prev = tail;
        tail->next = temp;
        tail = temp;
        allNumber++;
    }
    else
    {
        temp->prev = NULL;
        head = tail = temp;
        allNumber++;
    }
}

const char * List::GetLineByID(int ID)
{
    Node *temp = head;

    while ( temp != NULL )
    {
        if( temp->currentID == ID )
            return temp->str;

        temp = temp->next;
    }

    return " ";
}

int List::allNumber = 0;

// Добавление данных в список
void CreateLines(string text)
{
    listLine->ClearList();

    int i = 0;

    while(text.length() > 6)
    {
        listLine->Add(text.substr(0, 6).c_str());
        text = text.substr(6, text.length());
    }

    listLine->Add(text.c_str());
}

2ba151d352434afe874a7fe041ea0197.png

Вот как собственно кракозябры отображаются.
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
@vilgeforce
Раздолбай и программист
Я вижу что вы копируете указатель на память, содержащую строку. При этом вы не учитываете, что этот указатель может ссылаться на память, которую кто-то выделил и когда-то освободит, что, скорее всего, и происходит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы