Я продолжаю получать следующую ошибку: Необработанное исключение в 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
}
Если у кого-нибудь есть какие-либо советы или идеи о том, что я могу сделать, чтобы это исправить, пожалуйста, дайте мне знать. Если есть какой-то другой код, который я должен добавить, дайте мне знать об этом.
Это:
*myTree = Tree(file);
выполняет запись в нераспределенную память путем разыменования неинициализированного указателя. Кажется, указатель указывает на 0, что объясняет исключение по этому адресу.
Я догадываюсь, что вы пытаетесь создать экземпляр 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
когда вы закончите с этим.