spa*_*ger 11 c++ pointers memory-management
请考虑以下代码:
int a = 10;
int * b = &a;
int * c = b;
delete b; // equivalent to delete c;
Run Code Online (Sandbox Code Playgroud)
我在最后一行是否正确理解,delete b并且delete c是等效的,并且两者都将释放内存空间a,因此a不再可访问?
Bat*_*eba 42
程序的行为未定义.您只能使用delete指向已使用分配的内存的指针new.如果你写过
int* b = new int;
*b = 10;
int* c = b;
Run Code Online (Sandbox Code Playgroud)
那么你可以写任何 delete b; 或 delete c;释放你的记忆.不要在电话会议之后或之后尝试取消引用,但这样做的行为也是未定义的.bcdelete
如果b并c指向相同的内存,则删除其中任何一个都会释放内存,以便假设正确. a在这种情况下,变得不可访问是不正确的,因为你没有指向动态分配的内存,你只能调用delete/ delete[]上用new/ 创建的东西new[].尝试delete/ delete[]未使用new/ 分配的指针new[]是未定义的行为,通常会以分段错误结束.