向量到函数内部的数组

闲置

我有一个通过先将值放入向量来填充动态数组的函数。

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中存在垃圾。

http://ideone.com/DLy1PF

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章