tl; dr - 请您在下面的第一个代码片段中展开4条评论?具体是什么意思derefC/C++指针问题
我是一个很长时间的Java开发人员,希望学习C++。我遇到了针对开发者的this website。
int x, *p, *q;
p = new int;
cin >> x;
if (x > 0) q = &x;
*q = 3; // 1. deref of possibly uninitialized ptr q
q = p;
p = new int; // 2. potential storage leak (if x != 0 this
// memory will not be returned to free storage)
*p = 5;
delete q;
*q = 1; // 3. deref of deleted ptr q
q = p;
if (x == 0) delete q;
(*p)++; // 4. deref of possibly dangling ptr p (if x is zero)
尽管我认为我理解指针是如何工作的,但我发现这些注释很难理解。
我把;
- 我们要么分配X(& *当然Q)在3或当q!= & X则Q有一个公正的价值,因为它是未初始化的,我们刚才随机分配的一块内存到值3.我不确定如何解引用未初始化的东西?
- 这很好
- 取消引用已删除的指针有什么问题?在'删除q'之后* q是无意义的?
- 悬挂指针有什么问题?即使我们仍然有指向它的指针,现在我们已经删除了它,内存是否可以重新分配?
我想我的基本误解是关于只是声明一个int指针,这是否也分配内存?它是堆栈还是堆?
解除引用是否意味着'读取指针地址处的值'?我认为我的混淆是,我认为它会失去对某些数据的引用;
int *x;
x = new int;
*x = 5;
x = new int; // Dereferencing the first bit of memory allocated.
感谢您的耐心,我希望这有一定道理的问题,
GAV株系
对指针可能发生的所有问题的良好总结。 – 2010-02-08 11:58:47
另一方面,变量名称使其不可能遵循逻辑。真正的代码永远不会接近这个复杂的(或者说,不应该是) – 2013-01-30 19:24:19