Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重新放置并修改参数中的值_C++ - Fatal编程技术网

C++ 重新放置并修改参数中的值

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 <<

我正在写一些代码,并解决了向量上的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 << 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]