Работаю над программой аналогом 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 класса может чем-то помочь...
Если надо, могу загрузить остальной код проекта.
Вот сама ошибка:
Честно, было бы интересно узнать, почему выдает ошибку, чтобы потом делать всё правильно и с пониманием работы 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;
}
}

