Необработанное исключение в 0x009f240e в OpenGL и GLUT — 101.exe: 0xC0000005: место записи нарушения прав доступа 0x00000000

Я продолжаю получать следующую ошибку: Необработанное исключение в 0x009f240e в OpenGL и GLUT — 101.exe: 0xC0000005: Место записи нарушения доступа 0x00000000.

Я нашел здесь несколько вопросов с похожим кодом ошибки, но все они, кажется, говорят, что проблема в следующем: разыменование пустого указателя. Однако я не могу найти ничего, что действительно объясняет, что это значит или что с этим делать.

Вот небольшой пример моего кода:

Tree* myTree; //global variable pointer

int main (int argc, char** argv)
{
fstream file = fstream ("Tree.txt");

*myTree = Tree(file);   // This is where the error is occuring
}

Если у кого-нибудь есть какие-либо советы или идеи о том, что я могу сделать, чтобы это исправить, пожалуйста, дайте мне знать. Если есть какой-то другой код, который я должен добавить, дайте мне знать об этом.

-3

Решение

Это:

*myTree = Tree(file);

выполняет запись в нераспределенную память путем разыменования неинициализированного указателя. Кажется, указатель указывает на 0, что объясняет исключение по этому адресу.

2

Другие решения

Я догадываюсь, что вы пытаетесь создать экземпляр Tree и иметь глобальный указатель myTree указать на это.

Если это так, ваша проблема в синтаксисе, который вы используете для создания и назначения этого экземпляра. *myTree на самом деле разыменовывает указатель, и вы пытаетесь присвоить его копии Tree(file)

Что вам нужно сделать, это создать экземпляр Tree с new оператор и назначить возвращаемое значение (которое является указателем на вновь созданный экземпляр) указателю myTree (в отличие от разыменованного * myTree).

int main (int argc, char** argv)
{
fstream file = fstream ("Tree.txt");

myTree = new Tree(file);   // Create a new instance of Tree and store its pointer in myTree
}

Не забудьте освободить память, созданную operator new позвонив delete на myTree когда вы закончите с этим.

0

По вопросам рекламы [email protected]