1 如果a,b都指向动态分配的内存,一般不要执行a=b这样的操作,如果确有必要这么做,可以先将a保存在别处。比如 int *c=a; a=b; 这样a,b所指向的内存以后都能释放。
2 一指针所指内存被释放以后,应紧接着将其置空。比如 delete a; a=0; 这样,一方面可以避免误用a而引发错误,另一方面,也能知道a是否已经释放了。
你这个写法已经出现内存泄露了,b用a去赋值,b之前指向的内存地址已经丢失了,a和b同指向一个地址,所以无论你delete a在前还是在后,这里一定会出问题的。
如果要知道b原先的地址,你这里只能再借助另外一个临时变量去存了。
1. 无法判断,首先你就不能直接a=b,必须等delete a之后才能把 b赋值给它,其次,你每次delete a或者delete b之后,必须加一句a= NULL;否则你永远无法判断
2. 无论你执行delete b还是不执行,你总有空间没法释放,原因在于b=a已经把 b原来拥有的空间弄丢了,这就是常见的“内存泄露”
开僻了空间就必须有守护那块空间,在释放b指向的内存之前你让b离开了它守护的区域这是很不正确的,b指向的内存就不能释放了,这叫内存泄漏,禁止!!
你已经丢失了b指向的内存的地址,再也找不会来了,这种现象被称为内存泄露,在编程时要防止内存泄露