使用std::map<std::string, GLuint>
(原文如此!)时出现分段错误。那里没有可见的指针(我可以做错的地方)!我不知道怎么可能。它不会发生在每个地方,只在graphical_engine::draw(figure *f)
和更少的地方(我认为)。当我尝试执行以下操作时,分段错误会攻击我:cached["pos"] = 2
,cached.begin()->first
等。但是,一步一步:
首先,我必须注意到我正在使用这个'项目'C ++ 11。我不知道这些信息是否有用,但是......
我也在使用SFML库打开一个窗口并在其中写入文本。
我在OpenGL中创建了一些图形应用程序。我陷入困境,在那里我创建了一种缓存。我想在着色器程序中存储顶点属性的索引。我只是不想多次使用glGetAttribLocation
对其进行“充电”(我第一次拨打glVertexAttribPointer
,第二次使用glEnableVertexAttribArray
),所以我选择了'在std::map<std::string, GLuint>
中缓存它。
在我的应用程序中,我写了几个类负责:应用程序逻辑,图形。在图形类中,我声明了辅助类型:shader
,shader_program
。我正在编写它,因为当我调用s.is_cached("pos")
时,例如int main
,没有分段错误。当我尝试在方法s.is_cached("pos")
中尝试拨打void graphics_engine::draw(figure *f)
时,会出现此问题。然后出现了着名的分段错误,这并不好笑。
bool shader_program::is_cached(const char *name)
实现如下:
bool shader_program::is_cached(const char *name)
{
std::string attrname = name;
// p like 'pair'
for(auto p: cached)
{
if(p.first == attrname) return true;
}
return false;
}
带有选项g++ (...) -std=c++0x
的Compilator -g -D_GLIBCXX_DEBUG
会生成与我的gdb交互并返回的代码
__gnu_debug::_Safe_sequence_base::_M_attach_single (this=0xb7b805c9,
__it=0xbffff478, __constant=false)
at ../../.././libstdc++-v3/src/debug.cc:274
274 __it->_M_next->_M_prior = __it;
如果您不理解我的任何代码,请发表评论。
完整代码:http://jackweb.ovh.org/OGL.zip
导致分段错误的原因是什么?