小编Sle*_*lek的帖子

c ++ STL map :: operator []对要删除的条目完成

std::map<int,int> bar;

int foo(int key)
{
  bar.erase(key);
  return 1;
}    

int main()
{
  bar[0] = foo(0);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在使用电栅栏检查内存使用情况时,使用GCC 4.8编译的代码会出现故障.

LD_PRELOAD=libefence.so.0.0 ./a.out
Run Code Online (Sandbox Code Playgroud)

问题来自于编译器生成的代码开始在地图中分配新条目,然后执行foo()以获取要放入的值bar[0].在运行时foo(),条目被破坏,代码最终通过写入未分配的内存结束.

操作的排序方式取决于编译器实现,还是由C++当前标准指定?

c++ dictionary stl segmentation-fault electric-fence

4
推荐指数
1
解决办法
136
查看次数