当我向 vector<int *> 添加元素时,我遇到了一些问题
when I add elements to the vector<int *>, I meet some problems
这是我的编码:
std::vector<int *>a;
for(i=0;i<3;i++)
{
int j=i+1;
int *p=&j;
a.push_back(p);
}
for(auto &c:a)
{
std::cout<<*c<<std::endl;
}
我想让输出为1,2,3,但输出为3,3,33。我似乎已经添加了相同的指针到a,但是我想在循环中添加不同的指针,什么我应该这样做,上述错误是如何发生的?
j
具有自动存储持续时间,而指向它的指针仅在 for
循环的特殊迭代中有效。p>换句话说,您创建了一个悬挂指针的向量!您提出这样的指针的行为是不确定的。
而不是考虑std::vector<int>
。
(您在输出中反复看到相同的值的事实可能是可能,由于C 运行时在同一内存位置重新创建j
。因此,C 标准不坚持这种行为。(
std::vector<int *>a;
for(i=0;i<3;i++)
{
int j=i+1;
int *p=&j;
a.push_back(p);
}
p
是堆栈中的地址。此外,j
和p
仅在循环的相应迭代中有效,一旦循环进入下一个迭代或结束,它们就不再显着(j
已破坏(。
如果您真的想要指针的向量,则指针需要有效。一种选择是指针指向堆中的对象。另一个选择是指针指向堆栈中永远不会出现范围的对象,即永不破坏。
另一个更好的选择是让对象本身的向量,例如vector<int>
。
相关文章:
- 编译包含字符串的代码时遇到问题
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 从其他类访问类时遇到问题
- 使用静态成员声明类时遇到问题
- C++ 填充数组时遇到问题
- 在将字符串放入字符串向量时遇到问题?
- 余数除法和不允许除以零 (c++) 时遇到问题
- 我在C++中使用 getline() 函数时遇到问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 在我的四叉树实现中遇到问题
- 在 c++ 中循环遍历数组时遇到问题
- 使用 MinGW 在 Windows 上构建 GLEW 时遇到问题
- 编译 Cilk Plus 程序时遇到问题
- 存储另一个函数返回的布尔数组时遇到问题
- 我在 OpenGL 中显示图像时遇到问题
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组
- 在 for 循环中更新两个变量时遇到问题C++
- 为什么我的程序在打开网络设备时遇到问题
- 在 Tensorflow C++ 中使用 FIFOQueue 时遇到问题
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?