C++原始指针和"delete"
C++ raw pointers and "delete"
我对下面的代码片段有一个问题:
double d = 20.1;
double* pd = new double;
...
pd = &d;
delete pd;
最后一行在 Visual C++ 2015 中引发错误。这是否意味着指针"pd
"指向"d
"的堆栈地址,并且它在堆中的原始指向地址(第二行等号的右侧(已经泄漏?
是的,您pd
泄漏了双精度指针,但这不是导致错误的原因。
该错误是由于您尝试delete
堆栈分配地址造成的。这是严格未定义的行为。delete
仅适用于使用new
创建的指针。
变量保存值。指针值就是值。不是名字。不是变量。
当你操作一个指针值时,例如把它传递给delete
,你只关心这个值。
它本质上等同于:
int one=1;
one=2;
std::cout << one; // you won't be surprised to see 2, will you?
变量中的当前值很重要;而不是以前的某个值。不是名字。
您的程序尝试释放(delete
(不是由您(用户(分配的对象,而是由编译器分配的对象。
这
是否意味着指针"
pd
"指向"d
"的堆栈地址,并且它在堆中的原始指向地址(第二行等号的右侧(已经泄漏?
是的,这正是这个意思。
相关文章:
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- C++原始指针和"delete"
- 基类指针:在哪里使用 new 和 delete
- 如何避免自定义 STL 向量类的智能指针 delete[] 异常?
- 为什么在C++中使用delete后指针不为NULL
- delete运算符如何处理c中的指针
- C++:为什么可以在没有事先使用 new 的情况下在指向结构的指针上使用 delete?
- 为什么当我在同一内存中各有两个指针时,我必须调用"delete"两次?
- 这些指针中的哪一个需要免费()或delete()
- 对不完整类型的空指针调用delete合法吗
- ::运算符 delete(指针) 返回释放的字节大小
- 复制指针,然后调用 delete
- 在delete()之后不会断言两个指针都指向NULL
- Delete无法识别列表中的指针分配
- delete不会将0分配给指针
- 在“delete”之后重复使用指针
- 如果我对对象调用 delete,矢量中的对象指针是否被删除
- 在c++中,Delete指针和重新分配给出了相同的结果
- 什么是delete指针,指针=0;表述功?它清除内存两次吗?
- 指针错误,在delete[]指针中中断