使用c ++模板时内存损坏

时间:2014-03-03 18:53:44

标签: c++ templates boost

template<typename V>
class Counter 
  : public boost::enable_shared_from_this<Counter<V> > {

 public:
  Counter(boost::asio::io_service& io_service, uint32_t update_interval)
    : current_load_(std::numeric_limits<V>::min()), 
      last_load_(std::numeric_limits<V>::min()),
      max_load_value_(std::numeric_limits<V>::max()),
      update_timer_(CreateTimer(io_service)),
      update_interval_(update_interval) {
  }

  void Start() {
    update_timer_->Start(boost::bind(&SingleLoadCounter::UpdateLoad, 
        this->shared_from_this(), _1),
        boost::posix_time::milliseconds(update_interval_));
  }

  void Stop() {
    update_timer_->Stop();
  }

 private:
  void UpdateLoad(std::function<void(bool redial)> callback) {
    {
      boost::unique_lock<boost::mutex> lock(mutex_);
      last_load_ = current_load_;
      current_load_ = 0;
    }
    callback(true);
  }

  V current_load_;
  V last_load_;
  V max_load_value_;

  TimerPtr update_timer_;
  uint32_t update_interval_;

  boost::mutex mutex_;
};

boost::shared_ptr地址update_timer_.px中创建此类的实例后有效。但是当我在Stop()中调用update_timer_上的方法时,我得到了分段错误,因为update_timer_.px指向了错误的位置。

update_timer_.px的地址:

  • Counter的构造函数中:0x1b15b50
  • 方法Stop:0x1b15b3000000000

在gdb下运行它,我看到0x1b15b3是update_timer_.pn的地址。所以不知怎的this->update_timer_.px前进了几位

所有这些都是在发布目标上完成的。在调试它工作正常。类Counter用作shared_prt,模板类型为uint32_t

System: Ubuntu 10.4 x64, gcc: 4.7.2

0 个答案:

没有答案