我有一个通过先将值放入向量来填充动态数组的函数。
void fillArray(int*& arr) {
vector<int> temp;
for(int i = 0; i < 10; i++) {
temp.push_back(i);
}
arr = &temp[0];
}
int main() {
int* arr;
fillArray(arr);
for(int i = 0; i < 10; i++) {
cout << arr[i] << " ";
}
return 0;
}
输出:
0 1 2 3 4 5 6 7 8 9
基于此答案,我使用的代码仅创建了指向向量内部数组的指针-但在离开函数范围后,所述向量被破坏了。为什么事实结束后打印数组会给我正确的输出?
您只会得到不确定的行为。内存可能被标记为空闲,但是以前的内容可能仍在该内存位置。这就是您所看到的。内存的下一个分配可能会用垃圾填充该空间。
在函数退出后,我通过分配另一个int向量来稍微修改了您的示例,现在您看到在输出的vector中存在垃圾。。
int* v;
dothings(v);
vector<int> temp = {1,2,3,2,1,2,3,12,3,1,2,3,1,23,1,2,3,1,23,1,2,3,1,3,12};
for(int i = 0; i < 10; i++) {
cout << v[i] << endl;
}
输出:12、135065、2、3、4、5、6、7、8、9
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句