【问题标题】:class private variable corruption类私有变量损坏
【发布时间】:2012-06-14 16:43:44
【问题描述】:

我有一个 std::vector 的某种形式的类

class A{
 public:
 A():i(someNumber){}
 void useI() const{
   //do something with i
 }
 // No destructor defined
 private:
  int i;
};

我的代码循环遍历每个数据点并在数组中的每个元素上调用useI()。经过几百次迭代,变量i 被破坏了,我不知道为什么。这种情况可以复制。我知道这里没有太多细节,但任何关于检查内容的建议都非常感谢。

【问题讨论】:

  • 似乎没有someNumber 的声明。
  • 你是如何遍历向量的??
  • 这确实不够详细,无法给出答案。将调用代码剥离为一个简短的工作示例并将其发布在此处。如果你幸运的话,你会在这样做的时候自己发现错误。

标签: c++ c memory gcc memory-corruption


【解决方案1】:

最有可能导致这样的事情是过度索引数组访问未指向正确位置的指针。现在,找到发生这种情况的位置并非易事,但 valgrind 等工具可以提供帮助。

如果没有正确终止或不正确地应用了保持缓冲区的大小,使用 C 风格的字符串也很容易导致过度索引字符串

另一个原因可能是双重删除/释放也会破坏内存的指针

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2011-10-21
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多