2012-11-27 66 views
1

我完全被這個錯誤困惑,我希望你能幫助我! 我有一個類有一個結構向量(結構稱爲粒子)。我只是寫一個getter,它返回結構中某個字段的向量;一次,一個叫做X字段,然後再對場所謂的V:當聲明向量時神祕的malloc內存分配錯誤

vector<double> x = s.getx(); 
vector<double> v = s.getv(); 

出於某種原因,信息getX工作,但getv時不會:它給了我「的malloc():內存破壞」。

下面是類的getX和getv時:

vector<double> getx() { 

    vector<double> ret(number-2); 

    for(int i = 1; i < number; i++) { 

     ret[i-1] = masses[i].x; 

    } 

    return ret; 

} 

vector<double> getv() { 

    vector<double> ret(number-2); 

    for(int i = 1; i < number; i++) { 

     ret[i-1] = masses[i].v; 

    } 

    return ret; 

} 

在這條線發生該錯誤:

vector<double> ret(number-2); 
在getv時

我很困惑的原因是這兩種方法本質上是相同的!當我用一個常數替換(數字-2)時,我甚至會得到同樣的錯誤,例如, 4.它根本無法分配內存!

我希望你能看到我做了什麼錯?

非常感謝您的幫助, 最良好的祝願, NOCTILUX

+6

矢量大小應該是'number-1',你只能得到一個錯誤。 – ipc

+2

@ipc是對的。爲了消除錯誤的可能性,使用'push_back'而不是賦值。 –

回答

5

內存損壞錯誤很少點在哪裏露面它們發生;他們稍後會出現,當有東西撞到損壞的內存時。在這種情況下,兩個函數都在寫入不屬於它們的內存。每個使用number - 2元素初始化一個vector,然後寫入vector[number - 1],這不存在。

+0

非常感謝大家!所有事情都是錯誤的... 這個解釋很有意思,但我還沒有預料到來自Java的另一個陷阱。謝謝,皮特! – noctilux