堆栈上的值会发生什么,将其放在堆上的数组中
What happens to values on the stack that get placed in array on the Heap
我想知道我是否在C 的堆上创建一个数组,然后将数据从堆栈分配到数组,到底会发生什么?数据是否复制到堆?
代码片段:
int a = 1;
int b = 2;
int *c = new int(3);
int *arr = new int[3];
arr[0] = a;
arr[1] = b;
arr[2] = *c;
int a = 3;
a具有3。A的内存地址为0x345a或类似的内容。a在堆上。
int *p = &a;
指针P分配了a的地址。P的内存地址为0x123b或类似的内存。该内存地址保留值0x345a指向值3
的位置。指针P在堆上。
如果您打印a
和*p
,您将获得3
,因为它们是从同一内存位置获得的值。
如果您打印&a
和p
,您将获得0x345A
,因为A的地址为P值。
如果打印&p
,您将获得0x123B
,因为这是指针p。
假设 *c指向堆上的整数,您可以将C的值存储在数组中。
int *arr = new int[3];
...
arr[2] = c;
您不想做的是:
int foo = 10;
arr[2] = &foo;
现在,您的数组指向堆栈上的内存位置。只要您在该功能中,就可以正常工作,但是一旦您退出功能并收回堆栈,就会指向垃圾。
相关文章:
- 通过JNI传递数据数组的最快方法是什么
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 当该数组的索引中没有元素时,指针指向什么?
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 从字符数组的元素中减去'a'是什么意思
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 字符数组前面的加号是什么意思?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 在C++中,建议通过数组循环的方式是什么?
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- C++数组中的初始值设定项是什么?
- 如果我在字符数组上使用 close() 会发生什么?
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 将 std::unique_ptr 重置为指向数组的指针有什么问题?