【发布时间】:2012-09-09 01:21:00
【问题描述】:
我正在尝试更深入地了解新运算符。我确实理解它从堆中分配内存并返回指向内存的指针的事实。我的问题是,一旦我得到指针并使用它来存储另一个指向另一个声明变量的指针,值复制或指向的值是如何发生的?比如
我声明了一个变量
int x = 4;
然后说
int* ptr = new int;
ptr = &x;
ptr 从堆中指向一块内存。 x 定义在拥有单独内存块的堆栈中。 ptr 和 x 的地址相同。如果我删除 ptr,x 仍然有效,因为它仍然存在于内存中。当我说 *ptr 时,我正在寻找 ptr 指向的值,在这种情况下是 4。我的问题是 4,它在哪里。它是否存在于两个单独的内存块中。一个由 x 表示,另一个是我刚从 new 得到的。这个过程是如何发生的? 4 如何在两个块之间传输,或者我错过了什么?请帮忙。
当我说 ptr = &x 时,那是按位复制。换句话说,我是否永远失去了刚刚通过堆访问的内存?
【问题讨论】:
-
不幸的是,您程序中的几乎所有内容都是未定义的行为,并且您的大多数假设都是错误的。