【问题标题】:Unhandled exception at 0x009f240e in OpenGL and GLUT - 101.exe: 0xC0000005: Access violation writing location 0x00000000 [closed]OpenGL 和 GLUT 中 0x009f240e 处的未处理异常 - 101.exe:0xC0000005:访问冲突写入位置 0x00000000 [关闭]
【发布时间】:2012-11-03 04:12:44
【问题描述】:

我不断收到以下错误:OpenGL 和 GLUT 中 0x009f240e 处的未处理异常 - 101.exe:0xC0000005:访问冲突写入位置 0x00000000。

我在这里发现了一些带有类似错误代码的问题,但他们似乎都说问题是:取消引用 NULL 指针。但是,我似乎找不到任何能真正解释这意味着什么或如何处理它的东西。

这是我的代码的一个小示例:

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
}

如果有人对我可以做些什么来解决这个问题有任何建议或想法,请告诉我。如果我还需要添加任何其他代码,请告诉我。

【问题讨论】:

  • 好吧,检查file是否打开/有效。
  • @KirilKirov,问题出在*myTree
  • 请,请,请。在提出此类问题之前,请考虑至少阅读一本基本的 C 和/或 C++ 书籍。你取消引用一个空指针,很明显问题出在哪里,甚至从你得到的错误消息中,你甚至添加了一个空指针标签,但你仍然在这里问它......
  • @Vlad:不是运气,全局变量保证在程序启动时初始化为0。
  • @AdamRosenfield:你是对的,更正了。但重点仍然存在:)

标签: c++ dereference null-pointer


【解决方案1】:

这个:

*myTree = Tree(file);

正在通过取消引用未初始化的指针来写入未分配的内存。指针似乎指向 0,这解释了该地址处的异常。

【讨论】:

  • myTree 不是未初始化的——全局变量总是保证在程序启动时被初始化为 0。
  • 我知道问题是我试图取消引用空指针。我不明白这是什么意思或如何为对象的指针分配内存。
  • @AdamRosenfield 不是只对static 变量有效吗?
  • @unwind:不,全局范围内的所有对象都是零初始化的,无论它们是否具有内部链接 (static) 或外部链接 (extern)。请参阅 C++03 §3.6.2/1(非本地对象的初始化)[basic.start.init]
【解决方案2】:

我猜你要做的是创建一个Tree 的实例并让全局指针myTree 指向它。

如果是这种情况,您的问题在于您用于创建和分配该实例的语法。 *myTree 实际上是 dereferences the pointer,而您尝试将其分配给 Tree(file) 的副本

您需要做的是使用new 运算符创建Tree 的实例,并将返回值(指向新创建的实例的指针)分配给指针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
}

完成后不要忘记通过在myTree 上调用delete 来释放operator new 创建的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多