【问题标题】:Memory usage and overwrites in c++c++中的内存使用和覆盖
【发布时间】:2013-11-18 19:46:07
【问题描述】:

我正在编写一大段代码。作为我的主类构造函数的一部分,我声明了大量向量,它们在某一点或另一点被填充(全部用双精度数)。直到不久前,代码运行良好,但在我添加了一个进一步的双精度向量之后,一个完全不相关的变量(一个决定特定“运行”是否成功的变量)由于某种原因正在被更改。 我没有添加任何更改此成功变量的行,当我打印出它的值(成功运行导致变量为零)时,它每次都会变为一个大整数,但每次运行它都会给出不同的值。 我感觉我在内存分配方面做错了,但我不知道到底是什么! 欢迎任何建议, 干杯 杰克

更新

class MyClass {
            std::vector <std::vector<HLV> > qChains;    
    std::vector <std::vector<HLV> > VertexChains;
    std::vector <std::vector<double> > Virtuals;    
    std::vector <double> VProducts;         
    std::vector <double> QProducts;         
    std::vector <double> StrongCouplings;       
            int EventStatus
}

然后在“MyClass”的另一种方法中,我有一个快速的 if 循环检查事件是否正常:

if (GetEventStatus() != 0) cout << "ERROR!! " << GetEventStatus() << endl;

自从我添加关于 StrongCouplings 的行以来,状态一直在返回随机的大整数。 然而,我注意到,如果我在各个地方检查 EventStatus 的值时放置一系列打印语句,问题就会消失!

【问题讨论】:

  • 至少给我们看一些代码
  • 显示一些代码,任何代码。你改的代码是什么?以前是什么样子的。我们现在绝对没有什么可做的。
  • 就像我说的代码远远超过 10k 行,并且分布在大量文件中。如果有帮助,我将添加类定义的摘录?
  • 出于好奇,什么类型的“变量”接受添加的双精度向量?您是否将字段添加到结构或类?请告诉我们。 (另外,HLV 是什么?) PS - 我注意到一些分号丢失。
  • 嗨 ebyrob 是的,我在一个类中添加了另一个向量

标签: c++ memory memory-management vector


【解决方案1】:

尝试添加 char buf[128];在改变其值的变量之前 - 如果它有帮助 - 这将意味着一些先前的变量会覆盖您的变量。这可能是由于 ODR 违规或 C 数组的错误使用引起的(如果您在数组末尾之后写入)

【讨论】:

  • 更新后。样品似乎还可以。一个愚蠢的问题。您是否完全重建了您的项目?
  • 我做了,是的,这真的很奇怪,但是一旦我意识到 cout 语句只是打印了变量值的变化正在帮助我再次删除它们以查看会发生什么,现在它正在跳跃没有了!
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
相关资源
最近更新 更多