【发布时间】:2020-03-21 19:25:38
【问题描述】:
我正在用 C++ 编写一个程序,我需要一个 2d 指针网格,这些指针指向存储在向量中的对象。我测试了程序的某些部分,并在输出中看到了奇怪的结果。
我将对象更改为整数并删除了所有不必要的内容以将其缩减为下面的代码 sn-p,但我仍然得到一个奇怪的输出。
vector<vector<int*>> lattice(10, vector<int*>(10));//grid of pointers
vector<int> relevant;//vector carrying actual values onto which pointers will point
for(int i = 0; i<10; i++){
int new_integer = i;
relevant.push_back(new_integer);//insert integer into vector
lattice[0][i] = &relevant[i];//let pointer point onto this value
}
//OUTPUT
for(int j = 0; j<10; j++){
cout<<*lattice[0][j]<<" ";
cout<<relevant[j]<<endl;
}
我得到这样的奇怪输出:
19349144 0
19374040 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
此外,我的输出在每次运行时都会发生变化,具体取决于我制作网格的大小。
我希望左边和右边的所有值都是相等的,我想关于指针有一些基本的东西我还没有理解,如果这是一个非常基本的问题,很抱歉。
有人能解释一下为什么我会得到一些网格值的奇怪输出吗?
【问题讨论】:
-
未定义的行为。向量可以在
push_backs 之间重新分配您指向的内部内存。 -
对不起,你能不能解释的详细一点,我不明白。
-
如果你尝试
cout<<*(lattice[0][j])<<" ";会发生什么?