我有一個指針結構的數組,像這樣:錯誤,動態分配對象到一個數組
class Terrian {
...
private:
Vector *terrian_vertices;
...
}
而對於指針的數據中的「construct_vertices」被生成函數
Terrian::Terrian(int width, int height) {
this->width = width;
this->height = height;
std::cout << "Width: " << width << " Height: " << height << "\n";
std::cout << "Vertices\n";
construct_vertices();
std::cout << "Element\n";
construct_elements();
std::cout << "Buffers\n";
construct_buffers();
}
void Terrian::construct_vertices() {
terrian_vertices = new Vector[width * height];
std::cout << "Generating data\n";
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int index = x + y * width;
Vector *pos = new Vector((GLfloat)x, 0.0f, (GLfloat)-y);
memcpy(pos, terrian_vertices, sizeof(Vector) * index);
std::cout << terrian_vertices[index].x;
Color *color = new Color(0, 255, 0);
memcpy(color, terrian_colors, sizeof(Color) * index);
}
}
}
這裏是程序的輸出(所有我在主函數中要做的就是實例化對象)
Width: 32 Height: 32
Vertices
Generating data
5.2349e-039
Process returned -1073741819 (0xC0000005) execution time : 10.073 s
Press any key to continue.
將第一個指針複製到數組時,程序崩潰,'x'的輸出應爲0.這是令人費解的。有誰知道是什麼原因導致這種情況發生?如果是這樣,是否有更好的方式動態分配結構 - 不使用memcpy?
'memcpy'中的'sizeof(Vector)* index'是錯誤的。您沒有分配那麼多'Vector's,所以您不能將那麼多的內存複製到該位置 – 2012-07-16 00:43:47
調試器知道。你有沒有試過使用它? – 2012-07-16 00:44:37
你的代碼片段中有許多可疑的東西,但最終沒有足夠的信息讓我們做任何事情,除了猜測。您需要使用調試器來識別問題,或者至少幫助您構建一個[最小測試用例](http://sscce.org)。 – 2012-07-16 00:45:20