多个指针指向相同的数据

Tes*_*sla 1 c++ memory

int a = 10; 
int* ptrA = &a;
int* ptrB = &a;

delete ptrA;

return 0;
Run Code Online (Sandbox Code Playgroud)

这不应该导致泄漏,导致mem/data被释放ptrA,但是我们有2个指向有效地址的指针,其数据刚被删除?它是如何工作的?

Gui*_*cot 7

它是如何工作的?

不完全的.首先,您有未定义的行为,您无法删除具有自动存储的对象(例如,在堆栈上).

让我们改变你的例子:

int* ptrA = new int{10};
int* ptrB = ptrA;

delete ptrB;

return 0;
Run Code Online (Sandbox Code Playgroud)

但是我们有2个指针指向一个有效的地址,其数据刚被删除?

好吧,两个.确实有两个指针,指向相同的值.

如果您打印的价值ptrAptrB,你会看到类似的东西:

0x0034ab56
0x0034ab56
Run Code Online (Sandbox Code Playgroud)

两个指针都指向内存中的相同地址.

换句话说,如果删除ptrA,您将在地址处取消分配对象0x0034ab5.由于两个指针都指向同一个地址,因此两个指针现在都是悬空的.它的官方称谓是一个无效的指针值,都ptrAptrB因为它的存储是无效的指针值以已释放的指针分别指向了.