也許我只是混淆的東西一點點。但請考慮這一塊的C++代碼:這個指針衝突的原因是什麼?
#include <iostream>
#include <list>
using namespace std;
void printArray(int *arr, int n)
{
for(int i=0; i<n; ++i)
cout << arr[i] << " ";
cout << endl;
}
int main()
{
list<int*> arrays;
int times=20, v[9]={1,2,3,4,5,6,7,8,0};
arrays.push_back(v);
while(times--)
{
int *cur = arrays.front();
arrays.pop_front();
printArray(cur, 9);
int ta[9], tb[9];
for(int i=0; i<9; ++i)
{
ta[i] = *(cur+i)+1;
tb[i] = *(cur+i)-1;
}
arrays.push_back(&ta[0]);
arrays.push_back(&tb[0]);
}
return 0;
}
正如你所看到的,其目標是,用默認數組{1,2 beggining, (在時間迭代中)這個數組的2個變體在int指針列表中。
因此,在第一次迭代中,2個數組{2,3,4,5,6,7,8,9,1}和{0,2,3, ,5,6,7,-1 }應存放在列表中,因此,第3 printArray應該是:
1 2 3 4 5 6 7 8 0
2 3 4 5 6 7 8 9 1
0 1 2 3 4 5 6 7 -1
現在,什麼情況是,第3 printArray是:
1 2 3 4 5 6 7 8 0
2 3 4 5 6 7 8 9 1
2 3 4 5 6 7 8 9 1
我已經已經印刷ta和TB在每次迭代和我知道真的被打印出的是1)默認數組,2)第一TA,3)第一TA的TB。但我真的不知道這種行爲的原因是什麼,我的意思是,在每次迭代中,新陣列(獨立於以前的陣列)不是ta和tb?如果是這種情況,我的for只是爲新陣列位置分配值,那麼爲什麼它們會相互衝突呢?
注意,ta和tb陣列存儲器AINT由STD矢量管理。我的猜測是,在連續的迭代中,數組可能會被釋放並且行爲不確定。嘗試在while循環之外分配它們 – quimnuss
也沒有三個int指針數組,您有三個指向各自int數組的指針。 – quimnuss
它是有道理的如果這就是原因。是的,如果我以前在while循環之外分配了所需數組的數量,或者只是在每次迭代時只是'int * ta = new int [9] ...',它基本上都是相同的。我的猜測是,由於ta和tb是while循環的局部變量,它們只會在範圍的末尾有效,這就是迭代本身的結束......您同意嗎? @quimnuss – yat0