具有值优化输出的突然分段故障

时间:2012-11-14 12:28:44

标签: c++ eclipse segmentation-fault debian

我有两种工作环境:

  • 在VirtualBox上使用Debian的笔记本电脑
  • 具有正常版本的Debian相同版本的PC

我使用两个系统,因为某些H / W不能与VB一起使用。 项目包括使用pthreads和ncurses。

突然间我在PC上出现了seg-fault错误,同时在Laptop + VB上一切正常。错误在线未连接到pthreads或ncurses 我正在使用Eclipse开发我的软件,迁移项目的过程是:

  1. 从USB驱动器上的笔记本电脑复制文件
  2. 将项目导入到PC上的Eclipse工作区
  3. 到目前为止一切正常。两者的工具链设置似乎相同。

    CODE:

    Config::~Config() {
        std::map<std::string, Setting*>::iterator configIterator;
            for(configIterator = config.begin(); configIterator != config.end(); ++configIterator){
                delete configIterator->second;
            }
        config.clear();
    }
    
    delete 运算符上出现

    seg-fault。在 del 之前检查对象存在时,看起来所有这些都在内存中。

    这是添加配置条目的方式:

    config.insert(std::pair<std::string,Setting*>("language", new Setting("en_en")));
    

    我的问题是双重的:

    1. 为什么我甚至使用-O0优化了值?
    2. 我应该寻找什么才能找到这种情况?
    3. 我知道这是分配或释放内存的东西,但我甚至不知道从哪里开始。我试图删除部分代码有错误,但这给了我更多错误在未知的地方。

      [编辑] @comments如下:

      我发现实际错误在to-string cast operator重载方法中,但是:

      Setting::operator std::string(){
          std::stringstream sstr;
          switch(what){
              case STRING: sstr << str; break;
              case INT: sstr << i; break;
              case FLOAT: sstr << f; break;
              default: sstr << str; break;
          }
          sstr << std::flush;
          return sstr.str();
      }
      

      当我改变它只返回一些虚拟字符串,如&gt;&gt;返回“x”&lt;&lt;没有seg-fault。 那么......上面的代码出了什么问题?为什么这适用于VB,但不适用于PC。

0 个答案:

没有答案