由于某种原因,如果数据是指针,我无法将数据存储在数组中。如果我阻止它成为一个指针它完美地工作,但我需要一个包含可变数量的数组,所以它必须是一个指针。这是我的代码。为什么这个数组一次不能存储多个顶点?
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;
答案 0 :(得分:2)
但是我需要一个包含可变数量的数组,所以它必须是 指针
不,它不一定是指针。只需使用std::vector<MVertex>
代替。
由于sizeof(Vertices)
,你的代码不起作用,这确实会为数组类型提供整个数组大小,但只提供指针类型的指针大小。
这是用作数组的指针类型特别糟糕的另一个原因:基本上没有办法获得数组的大小;类似于strlen
的黑客攻击是非常糟糕的非解决方案和C孑遗。
答案 1 :(得分:0)
假设其他所有内容都已正确设置,这很可能是您的问题:
memcpy(pVoid, Vertices, sizeof(Vertices))
这适用于数组,因为sizeof(Vertices)
返回数组的大小。但是如果Vertices
是指针,它将返回指针的大小。您需要4 * sizeof(MVertex)
。