我有全局變量:轉換矢量陣列問題
point4 * mypoints;
color4 * mycolors;
和代碼塊那是一個函數drawPlyFiles
vector<point4> retpolys;
retpolys.resize(polynum * 3);
GLint polyx, polyy, polyz;
for (int i = 0; i < polynum; i++)
{
inStream >> polyx;
inStream >> polyx >> polyy >> polyz;
//cout << "x: " << polyx << " y: " << polyy << " z: " << polyz << "\n";
retpolys[i*3] = retVerts[polyx];
retpolys[(i*3) + 1] = retVerts[polyy];
retpolys[(i*3) + 2] = retVerts[polyz];
//retpolys[i] = point4(polyx, polyy, polyz, 1.0);
}
mypoints = &retpolys[0];
return true;
最重要的部分的一部分,以從代碼拿走,是我設置全局mypoints(數組)等於retpolys(向量)。 Retpolys獲取來自for循環的數據。當我調試時,retpolys中的所有數據都是正確的。 (retVerts是point4的向量)
後來在我的主要初始化函數此獲取運行:
drawPlyFile("ply_files/airplane.ply");
//colorcube();
point4 temp = mypoints[1];
int thissize = sizeof(mypoints)/sizeof(mypoints[0]);
for (int i = 0; i < thissize; i++)
{
mycolors[i] = color4(0.0, 0.0, 0.0, 1.0);
}
代碼編譯罰款,但我有一個運行時異常。我調試才能找到問題。我在drawPlyFiles之後檢查了mypoints的值,看起來它只包含一個指向retpolys開始位置的指針。然而,當我調試時,它不會讓我查看數組的其他部分,只是第一個指針(當函數中有im時,我可以看到retpolys的所有單獨值),然後檢查這個大小的值,然後我得到一個像-12894161這樣的數字,這是沒有意義的,因爲它應該是mypoints的大小。
我認爲問題在於從retpolys轉換到mypoints,但我不知道如何解決它,或者即使這是錯誤的實際原因。任何幫助?
p.s.我希望mycolors擁有與mypoints相同數量的元素,並且所有em都是color4(0.0,0.0,0.0,1.0)
我從http://stackoverflow.com/questions/2923272/how-to-convert-vector-to-array-c得到的方法。但是你要說的是,vector函數在函數退出時被釋放,所以指針不是vector的開始,但是在內存中只是一個沒有意義的位置。你的意思是做一個實際的內存分配?你的意思是我應該讓該函數返回矢量並在全局空間中進行轉換? – y3di
你可以像上面提到的羅賓那樣做,讓「mypoints」成爲一個實際的向量而不是一個指針。它會簡化你的代碼和內存管理:「std :: vector mypoints;」。然後,在drawPlyFile中:「mypoints = retpolys;」。儘管這是一個建議,但您可能有限制,導致此示例無法使用。 –