我有我有x,y,z座標和另一個參數 - 能量的對象。具有相同x,y,z座標的物體的能量將被總結。我已經看到一個程序如何實現並遵循完全相同的方法,但是,我的程序失敗了,我不明白爲什麼。被覆蓋的C++向量
概述是方法。
我有一個D類對象的向量;
class D; //for the sake of time you will understand the structure of this class as u keep reading
int main()
{
vector< D>cont; //the objects to be summed are stored in this container
vector< D>cont2; //Second container: you will see the need later on
co_ord [100][100][100]; //Declare the range of available x, and z coordinates
for (int z = -49; z<50; z++)
for (int y = -49; y<50; y++)
for (int x = -49; x<50; x++)
co_ord[z][y][x] = -1;
for (int i = 0; i < cont.size(); i++){
int x, y, z, E;
**//PROBLEM AREA!!!**
x = cont[i].getx();//member function of class D : returns x of current obj
y = cont[i].gety();
z = cont[i].gez();
E = cont[i].getE();
if(x>=50){x = 49;}
if(y>=50){y = 49;}
if(z>=50){z = 49;}
if(x<= -50){x = -49;}
if(y<= -50){y = -49;}
if(z<= -50){z = -49;}
if (co_ord[z][y][x] = -1)
{
D obj(x, y, z, E); //create new object of class D
cont2.push_back(obj);
int index = cont2.size();
co_ord[z][y][x] = index - 1; // co_ord[z][y][x] has the storage index of this co-ordinate
}
else {cont2[co_ord[z][y][x]].AddEn(E); //AddEn() is a member function of class D that adds energy to "this" obj;
return 0;
}
}
}
現在我有2個主要問題:
如果我使用co_ord [300] [300] [300],程序給出一個分段錯誤。如果在3個連續for循環之前放置語句,則執行語句cout; 當我將co_ord的維數減少到co_ord [100] [100] [100]時,這個問題就解決了,我將能夠在其他地方發表一個聲明。
但是,還有一個奇怪的問題,我仍然不知道這是爲什麼。在前面的代碼中,發生這種情況的區域被標記爲「PROBLEM AREA」。基本上會發生什麼,co_ord [z] [y] [x]會在第一個循環後發出一些奇怪的值。第一個循環運行良好,即co_ord [-9] [0] [1]將cout -1,但在第二個循環中,我有像6783這樣的值,其他有時可能會達到8位數。但是這在第二個循環中發生。我嘗試了我所知道的一切,但我沒有成功。
請問,有人可以提供一個線索,爲什麼我有上述2個錯誤或解決方法嗎?正如我所說的,我有一個類似的代碼在我的系統上運行,這是一個更大的應用程序的一部分。在代碼中,他們爲他們創建的容器類實現了一些內存分配過程,但是他們的過程對我來說很複雜,因此我決定使用標準C++庫向量來完成它。任何幫助將不勝感激。
抱歉張貼錯誤代碼前,我已經糾正了大多數(我希望所有)錯別字
是否有省略的代碼,你填'cont'或'cont2'? – 2011-01-05 15:06:08
EH?負數索引到一個數組(-9)?有沒有搞錯?有沒有我錯過的東西?也許你應該首先打印所有'D'對象的位置並仔細查看索引! – Nim 2011-01-05 15:11:10
你應該真正解決你的代碼示例,並生成至少一個可編譯的例子 - 否則我們將整天坐在這裏,突出顯示真正基本的錯誤(除非你想要)? – Nim 2011-01-05 15:25:44