特定内存地址上的分段错误
Segmentation fault on specific memory address
在我看来,我有一个最烦人的问题,称为分段错误。通常,在 gdb 的帮助和跟踪我的所有代码的帮助下,我设法解决这些问题。不幸的是,这次不是。由于我的代码有点复杂,我将显示与问题相关的片段。
首先,在这个 setter 函数上给出错误:
void Texture::setRenderer( SDL_Renderer* renderer ) {
m_renderer = renderer;
}
当然,在我的纹理类中,有一个变量定义如下:
SDL_Renderer* m_renderer = nullptr;
由于错误的类型,我尝试跟踪特定的内存地址,以查看它是否有效。所以,参数。它来自我的资源管理器类,该类正在尝试向地图添加纹理。具体代码:
bool ResourceManager::add( const std::string texture ) {
Texture* tex;
tex->setRenderer(m_renderer);
}
当然,这个变量(m_renderer
)也来自不同的位置。我的Game
课。
m_resources.setRenderer(m_renderer);
此函数在我初始化渲染器后立即调用,没有任何错误。所以我的踪迹到此结束,没有找到问题所在......
我还尝试在所有这些函数中打印内存地址。它们都打印完全相同的内存地址。 来自 gdb 的堆栈跟踪:
Thread 1 "ConceptGame" received signal SIGSEGV, Segmentation fault.
0x0000000000408868 in Texture::setRenderer (this=0x0, renderer=0x660b60)
at ../Texture.cpp:68
68 m_renderer = renderer;
(gdb) bt
#0 0x0000000000408868 in Texture::setRenderer (this=0x0, renderer=0x660b60)
at ../Texture.cpp:68
#1 0x0000000000406865 in ResourceManager::add (this=0x7fffffffdb50,
texture="penguin.png") at ../ResourceManager.cpp:31
#2 0x0000000000403fb1 in Game::run (this=0x7fffffffdae0) at ../Game.cpp:83
#3 0x0000000000408b5f in main (argc=1, argv=0x7fffffffdcb8) at ../main.cpp:50
非常感谢有关解决此问题的任何帮助...
哇。我刚刚根据安迪G的评论解决了这个问题...... 在尝试解决此问题时,我不小心没有初始化指针,从而导致了此问题。
通过初始化指针修复;
Texture* tex = new Texture;
tex->setRenderer(m_renderer);
谢谢。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?