我正在使用SDL 2制作应用程序。我刚刚开始使用SDL_Mixer库,这给我带来了一个问题。如果我的解释看起来含糊不清,请原谅我,因为这个错误非常令人困惑。
有时候,当关闭我的程序时,程序会崩溃。只有在这种情况发生时删除部分代码后,我发现导致此问题的行是对delete
类型指针的简单Window*
调用。如果我删除该删除调用,则在关闭程序时不会再发生崩溃。另一件需要注意的事情是崩溃发生在调用delete
之后,这意味着程序甚至不会进入~Window()
内部,这真的很奇怪。
我注意到的另一件事是,当我从程序开头删除Mix_OpenAudio(...)
调用时,根本不会发生崩溃,无论删除调用是否存在。因此初始化SDL_Mixer与崩溃有关,但这只会增加混乱。
我希望有人知道这里可能出现什么问题,但如果我的解释过于模糊,那么我会尝试将问题复制到一小段代码中,我可以发布在这里。我不想将我的整个代码库复制到这个问题上,因为我不想让mod讨厌我。有什么想法吗?
答案 0 :(得分:0)
如果没有看到相关代码,我可以猜测两个最可能的原因:
答案 1 :(得分:0)
这主要是undefined behavior的一个例子,这是一个特殊情况,当达到时,对所发生的事情没有任何具体保证。
删除无效指针确实是未定义的行为。现在问题是你必须理解为什么以及何时指向Window
的指针变得无效,一些提示:
delete
时,该变量无效(因此您根本不会尝试删除正确的指针,例如返回对存储在指针中的指针的引用)来自方法的局部变量)答案 2 :(得分:0)