我很好奇,如果这段代码导致内存泄漏可能是由于我在第4行删除它之前将指针重新分配给第3行?
谢谢.
1. int y = 12;
2. int *pt = new int;
3. pt = &y;
4. delete pt;
Run Code Online (Sandbox Code Playgroud)
它不仅泄漏了动态分配的内容,int而且还有未定义的行为,因为您delete不能使用new(§5.3.5/ 2)未分配的对象.
操作数的值
delete可以是空指针值,指向由前一个新表达式创建的非数组对象的指针,或指向表示此类对象的基类的子对象(1.8)的指针(第10条) .如果不是,则行为未定义.
由于表示的对象y未分配new-expression,因此您无法使用delete它来销毁它.它的寿命取决于其范围.