此时有两种情况:① 原始的悬垂指针调用delete,系统检测到二次释放,直接core dump;② 原始的悬垂指针对指针地址上的内存进行读、写操作,可能意外的改写了其他程序的内容,即“踩内存”,导致发生意想不到的情况。) int* ptr1 = new int(42); int* ptr2 = ptr1; int* ptr3 = ptr1; cout << *ptr1 <<...
普通指针出现悬垂的根本原因在于:当多个指针同时指向同一个内存资源时,如果通过其中的某一个指针delete释放了资源,其他指针无法感知到。 解决方法自然想到了“引用计数” --- 通过一块额外的内存,实现对原始内存的管理。 在这块 “控制块” 内存中,保存当前对原始内存资源的引用计数。 普通指针多指针场景下出现悬垂指...