gpt4 book ai didi

c++ - 将 std::vector 复制到 void 指针

转载 作者:行者123 更新时间:2023-11-28 07:27:31 25 4
gpt4 key购买 nike

我有一个 std::vector<MyVertex>其中 MyVertex是一个结构。我必须将此数据推送到 Direct3D 9 中的顶点缓冲区,我看到的示例使用 memcpy .不幸的是,memcpy使我的应用程序崩溃,所以我肯定做错了什么。

std::vector<MyVertex> m_VertsBuff0;

void* vbPtr;
vertexbuffer->Lock (0, 0, &vbPtr, D3DLOCK_DISCARD);
memcpy (vbPtr, &m_VertsBuff0[0], sizeof(m_VertsBuff0)); // also tried sizeof(MyVertex)*m_VertsBuff0.size()
// std::copy(m_VertsBuff0.begin(), m_VertsBuff0.end(), vbPtr); // gives a compiler error void* unknown size
vertexbuffer->Unlock ();
device->SetStreamSource (0, vertexbuffer, 0, sizeof(m_VertsBuff0[0]));

更新:
这在我刚刚使用 array 之前是有效的而不是 vector .似乎我不必初始化 void*首先,因为这个例子工作得很好。然后我把它改成了vector结果出了问题。为什么我必须初始化 void*突然之间,这样做仍然会使我的应用程序崩溃。

memcpy (vbPtr, m_VertsBuff0.data(), sizeof(MyVertex) * m_VertsBuff0.size());

最佳答案

使用 m_VertsBuff0.size() * sizeof(MyVertex) 而不是 sizeof(m_VertsBuff0)并确保“vbPtr”指向正确分配的内存,例如:

void* vbPtr = new char[v.size() * sizeof(int)];

关于c++ - 将 std::vector 复制到 void 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18460105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com