为什么第一次迭代后的指针指向随机值?
Why pointer after first iteration points to random values?
这是我的代码,我认为每个cout行都会打印指针指向的相应对象。为什么会出现错误?这将打印一些随机的数字列表,第一个总是正确的。
int* f()
{
int array[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = array;
return p;
}
int main()
{
int* ptr = f();
cout << *(ptr+0) << endl;
cout << *(ptr+1) << endl;
cout << *(ptr+2) << endl;
cout << endl;
}
您的指针指向具有自动存储的数组。当函数返回并且指针悬空时,数组将死亡。
解决方案不是使用指针,而是使用矢量或动态数组。
本地数组在堆栈上创建,并具有自动存储持续时间。在你的情况下,数组是在堆栈上创建的,当函数 f(( 结束时被销毁。
有两种方法可以进行管理,以便 Array 在整个程序执行过程中保持活动状态。
1( 动态分配的数组
//C++
int *array = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
//c++ 11
int *array{ new int[]{ 1, 2, 3, 4, 5 } };
如果您需要释放空间,请始终记住使用 delete[] 释放动态分配的数组。
2( 静态数组
static int array[10] = {1,2,3,4,5,6,7,8,9,10};
静态变量是使用静态内存分配定义的变量。有关更多信息,请参阅 https://en.wikipedia.org/wiki/Static_variable
相关文章:
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 使用指针在分区函数中实现随机分区点
- 对于随机访问迭代器(矢量迭代器),迭代器C++样式指针吗?
- C++ STL 数据结构常时按索引推送/弹出/随机访问,并具有指向元素的可靠指针
- 为什么第一次迭代后的指针指向随机值?
- SFINAE - 检测类型 T 是指针、数组还是带有随机访问运算符的容器,以及给定的值类型
- 使用指针编译代码后,.cpp文件将变为随机字符
- 指向用随机指针归档的其他类对象的指针的c++向量
- 带有随机指针的链表的深层副本
- 定义指针随机崩溃该程序
- 随机生成的多维布尔指针错误
- 如何使用 std::shuffle 以随机顺序对具有唯一指针的向量进行洗牌
- C++初始化指针会使应用程序随机崩溃
- 使用随机指针C 复制列表
- 如何在C++中随机排列指针列表
- 如何从指针列表中获取随机指针
- 基于指针的基本随机访问迭代器的代码
- std::将成员函数绑定到 nullptr 处的实例,导致看似随机的 this 指针
- 随机播放函数无法使用指针
- 克隆一个带有随机指针的链表