c++中的内存使用和重写

Memory usage and overwrites in c++

本文关键字:重写 内存 c++      更新时间:2023-10-16

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

更新

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的值的过程中放置一系列打印语句,问题就会消失!

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