C++ 重新放置并修改参数中的值
我正在写一些代码,并解决了向量上的emplace_的问题C++ 重新放置并修改参数中的值,c++,C++,我正在写一些代码,并解决了向量上的emplace_的问题 void generateTube(std::vector<glm::vec3> &vertices, const glm::vec3 &pos) { glm::vec3 N, B; float cos, sin; ... for (int i = 0 ; i < 2 ; i++) { ... std::cout << pos <<
void generateTube(std::vector<glm::vec3> &vertices, const glm::vec3 &pos) {
glm::vec3 N, B;
float cos, sin;
...
for (int i = 0 ; i < 2 ; i++) {
...
std::cout << pos << std::endl;
vertices.emplace_back(pos + cos * N + sin * B);
std::cout << pos << std::endl;
...
}
}
正如您可以看到的,如果通过emplace_back修改pos的值。如果删除该调用,则该值永远不会更改
你有什么解释吗?
我在Windows 10上使用vs2019编译器,arch是x86_amd64
是位置指顶点的元素
这就是问题所在。在安置期间,可能会触发向量元素的重新分配,这会使指向向量元素的所有迭代器/引用/指针(包括位置)无效。取消对位置的引用会导致未定义的行为
一个简单的补救方法可能是在初始化pos参数之前保留足够的向量空间,这将确保在函数调用期间不会发生重新分配。如果调用push\u back怎么办?这不像是在利用就地创建,而是在数组之外构建整个对象。同样的行为。。。实际上pos是一个参数。const glm::vec3&pos。我不应该修改它。const只是一个提示,并不意味着你不能覆盖它。您编写的代码按原样工作,隐藏在这些点后面的密码是您的问题,很可能是内存损坏。请随意添加一个小的、可编译的、可复制的示例来说明您的问题,这不会得到答案。如果没有答案,很难说什么。pos指的是什么?它不是指顶点元素吗?
[0.000000, 0.000000, -1.000000]
[-1998397155538108416.000000, -1998397155538108416.000000, -1998397155538108416.000000]