0

出于某种原因,如果它是指针,我无法将数据存储在数组中。如果我阻止它成为一个指针,它可以完美地工作,但我需要一个包含可变数量的数组,所以它必须是一个指针。这是我的代码。为什么这个数组一次不能存储多个顶点?

MVertex* Vertices = new MVertex[VertexCount];
//MVertex Vertices[4];
string LDum;
getline(Input, LDum);
for (int i = 0; i < 4; i++)
{
    MVertex V;
    string Line;
    getline(Input, Line);
    istringstream ISS(Line);
    string X, Y, Z;
    ISS >> X >> Y >> Z;
    V.X = atoi(X.c_str());
    V.Y = atoi(Y.c_str());
    V.Z = atoi(Z.c_str());
    Vertices[i] = V;
}
Input.close();
GraphicsDevice->CreateVertexBuffer(4 * sizeof(MVertex), 0, MFVF,
    D3DPOOL_MANAGED, &MVertexBuffer, NULL);
VOID* pVoid;
MVertexBuffer->Lock(0, 0, (void**)&pVoid, 0);
memcpy(pVoid, Vertices, sizeof(Vertices));
MVertexBuffer->Unlock();
int Size = sizeof(Vertices);
delete[] Vertices;
4

2 回答 2

2

但我需要一个包含可变数量的数组,所以它必须是一个指针

不。

不,它不一定是指针。只需使用即可std::vector<MVertex>

而且您的代码不起作用sizeof(Vertices),因为它确实会为您提供数组类型的整个数组大小,但只会为指针类型提供指针大小。

这是用作数组的指针类型特别糟糕的另一个原因:基本上没有办法获得数组的大小。类似的黑客strlen是极其可怕的非解决方案和 C 残留物。

此处需要注意的重要事项

  1. 指针不是数组。
  2. 如果您不需要并且您不知道自己在做什么,请不要在 C++ 中使用指针
于 2013-07-28T23:33:11.997 回答
0

假设其他一切都已正确设置,这很可能是您的问题:

memcpy(pVoid, Vertices, sizeof(Vertices))

这适用于数组,因为sizeof(Vertices)返回数组的大小。但如果Vertices是指针,它将返回指针的大小。你需要做4 * sizeof(MVertex)

于 2013-07-28T23:33:52.460 回答