gpt4 book ai didi

c++ - 在 for 循环中创建和存储数组

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:29 25 4
gpt4 key购买 nike

我是 C++ 的新手,我在内存分配方面遇到了一些问题。

vector<int *> V;  

for(int i=0;i<3;i++){
int A[3];
cin>>A[0]>>A[1]>>A[2];
V.push_back(A);
}

for(int i=0;i<3;i++){
cout<<V[i][0]<<V[i][1]<<V[i][2]<<endl;
}

我想创建数组并将它们放入 vector 中,如下所示。但是如果我输入

1 1 1
2 2 2
3 3 3

输出将是

3 3 3
3 3 3
3 3 3

如果我将 int A[3] 替换为 int *A=new int() 那么我会得到正确的答案。我想知道为什么?

最佳答案

当您使用 int A[3]; 时您正在调用未定义的行为,因为您存储在 vector 中的数组在循环后超出范围。

如果您使用 int *A = new int(); ,您正在分配一个整数,然后使用三个,这也会调用未定义的行为。

你应该使用 int *A = new int[3];或附近分配三个 int 的数组.


在清晨的寒光中,int *A = new int[3];解决方案严重泄漏。 vector 析构函数不知道它需要释放子数组。

故障诊断仍然准确;需要重新考虑适当的补救措施。

我需要研究正确(无泄漏)的解决方案是什么——我现在还有其他事情要做。一个合理的选择是 vector< vector<int> > ,但我还没有编写代码,所以它还可以工作。

关于c++ - 在 for 循环中创建和存储数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22316793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com