使用std :: map <std :: string,gluint =“”>!</std :: string,>时出现分段错误

时间:2011-12-23 20:39:04

标签: c++ stl map segmentation-fault c++11

使用std::map<std::string, GLuint>(原文如此!)时出现分段错误。那里没有可见的指针(我可以做错的地方)!我不知道怎么可能。它不会发生在每个地方,只在graphical_engine::draw(figure *f)和更少的地方(我认为)。当我尝试执行以下操作时,分段错误会攻击我:cached["pos"] = 2cached.begin()->first等。但是,一步一步:

首先,我必须注意到我正在使用这个'项目'C ++ 11。我不知道这些信息是否有用,但是......

我也在使用SFML库打开一个窗口并在其中写入文本。

我在OpenGL中创建了一些图形应用程序。我陷入困境,在那里我创建了一种缓存。我想在着色器程序中存储顶点属性的索引。我只是不想多次使用glGetAttribLocation对其进行“充电”(我第一次拨打glVertexAttribPointer,第二次使用glEnableVertexAttribArray),所以我选择了'在std::map<std::string, GLuint>中缓存它。

在我的应用程序中,我写了几个类负责:应用程序逻辑,图形。在图形类中,我声明了辅助类型:shadershader_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

导致分段错误的原因是什么?

0 个答案:

没有答案