我有一个将指针放入 10x10 std::array 指针的函数。我制作了一个保存整数的全局 vector ,并具有创建新整数的函数,将它们放入 vector 中并在网格中分配它们的地址。 当我尝试访问网格时,我得到了垃圾值,即使我的所有值都应该被初始化。
我不确定我的错误在哪里。我检查了 vector ,我创建的所有船只都在那里。因为我的对象还活着,所以我不明白为什么我的指针不起作用。
#include <iostream>
#include <array>
#include <vector>
using namespace std;
using grid = array<array<int*, 10>, 10>;
vector<int> my_special_ints{};
grid fill_grid(int* val) {
grid g;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
g[i][j] = val;
}
}
return g;
}
void modifying_function(grid& g) {
for (int i = 0; i < 10; i++) {
int temp_int = i + 10;
my_special_ints.push_back(temp_int);
g[i][0] = &my_special_ints.back();
}
}
int main()
{
int empty_int = -1;
grid ptr_arr = fill_grid(&empty_int);
modifying_function(ptr_arr);
cout << *ptr_arr[1][0]; // junk value
}
最佳答案
当您调用 my_special_ints.push_back(temp_int);
时,如果 vector 的容量已满,它将分配新的内存。发生这种情况时,这将使您为之前的整数创建的所有指针失效。
有几种可能的解决方案。一种方法是预留
足够的容量(如果您知道在开始添加之前要添加多少个整数)。
另一个解决方案是将 modifying_function
分成两部分。首先,您需要将所有整数添加到 my_special_ints
数组。然后遍历该数组并更新您的 g
网格。
关于c++ - 为什么这个指向 vector 中有效 int 的指针未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54773014/