特定内存地址

时间:2018-04-17 16:00:10

标签: c++ segmentation-fault sdl

在我看来,我有一个最烦人的问题,称为分段错误。通常通过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的Stacktrace:

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

非常感谢任何有关解决此问题的帮助......

1 个答案:

答案 0 :(得分:0)

哇。我刚刚根据AndyG的评论解决了这个问题...... 在尝试修复此问题时,我意外地没有初始化指针,因此导致了这个问题。

通过初始化指针来修复;

Texture* tex = new Texture;
tex->setRenderer(m_renderer);

谢谢。