Работаю над программой аналогом SQL в C++ Возникло исключение: нарушение прав доступа для чтения _Pnext, хотя данные записываются нормально

void FindAllDatabaseColumns_1(const DatabaseInfo& pDatabaseInfo, string pDatabaseName, map<int, string>* pColumns, DatabaseInfo* pDatabaseColumns)
{
    string DatabaseColumns = "";
    map<int, string> lColumns;
    int lCounter = 1;
    DatabaseInfo lDatabaseColumns;
    lDatabaseColumns = *pDatabaseColumns;
    for (const Knot* p = pDatabaseInfo.begin(); p != NULL; p = p->next)
    {
        if (p->DatabaseName == pDatabaseName)
        {
            lColumns.insert(make_pair(lCounter, p->DatabaseColumn));
            lDatabaseColumns.AddColumn(p->DatabaseName, p->DatabaseColumn, p->ColumnTypeOfData);
            DatabaseColumns = DatabaseColumns + "|" + p->DatabaseColumn;
            lCounter++;
        }
    }
    DatabaseColumns = DatabaseColumns + "|";
    *pDatabaseColumns = lDatabaseColumns;
    *pColumns = lColumns;
    for (auto& IColumns : lColumns)
    {
        cout << IColumns.first << "\t" << IColumns.second << endl;
    }
}

Мой класс - где написано DatabaseInfo . Честно, там много кода, но он состоит на прототипе списка. Вот header класса может чем-то помочь... Если надо, могу загрузить остальной код проекта.

DatabaseInfo.h

Вот сама ошибка:

Ошибка

Честно, было бы интересно узнать, почему выдает ошибку, чтобы потом делать всё правильно и с пониманием работы C++!


Ответы (1 шт):

Автор решения: Oleg Гуменюк

вопрос отпал. Надо было использывать:

pDatabaseColumns->AddColumn(p->DatabaseName, p->DatabaseColumn, p->ColumnTypeOfData);

вместо присвоений и:

*pDatabaseColumns = lDatabaseColumns;

и записи в класс lDatabaseColumns.

void FindAllDatabaseColumns_1(const DatabaseInfo& pDatabaseInfo, string pDatabaseName, map<int, string>* pColumns, DatabaseInfo *pDatabaseColumns)
{
    string DatabaseColumns = "";
    map<int, string> lColumns;
    int lCounter = 1;
    DatabaseInfo lDatabaseColumns;
    //lDatabaseColumns = *pDatabaseColumns; //и возможно из-за этой
    for (const Node* p = pDatabaseInfo.begin(); p != NULL; p = p->next)
    {
        if (p->DatabaseName == pDatabaseName)
        {
            lColumns.insert(make_pair(lCounter, p->DatabaseColumn));
            //lDatabaseColumns.AddColumn(p->DatabaseName, p->DatabaseColumn, p->ColumnTypeOfData);
            pDatabaseColumns->AddColumn(p->DatabaseName, p->DatabaseColumn, p->ColumnTypeOfData);

            DatabaseColumns = DatabaseColumns + "|" + p->DatabaseColumn;
            lCounter++;
        }
    }
    DatabaseColumns = DatabaseColumns + "|";
    //*pDatabaseColumns = lDatabaseColumns; //вот из-за этой строки ошыбка
    *pColumns = lColumns; 
    for (auto& IColumns : lColumns)
    {
        cout << IColumns.first << "\t" << IColumns.second << endl;
    }
}
→ Ссылка