#include <iostream>
using namespace std;
int main()
{
int* A = new int[2];
A[0] = 10000;
A[1] = 2;
int*B = A;
delete B;
cout << B << A;
}
I found the code above, delete B;
removes the data of array A. Can we remove allocated memory by free some another assigned pointer?
CodePudding user response:
You don't delete pointers. You delete the thing pointed to.
A
, in your example isn't an array. It is a pointer that points to the first element of an array. When you write int* B = A;
, you make B
a pointer to the same memory. At that point A
and B
are identical, and the array they point to can be freed via either of them.
It doesn't matter how many times you copy a pointer. All that matters is that the thing pointed to by the pointer you pass wo your deletion expression was allocated with the corresponding allocation expression (i.e. new
/delete
, new[]
/delete[]
, malloc
/free
, etc).
CodePudding user response:
Can we remove allocated memory by free some another assigned pointer?
Yes, as long as you do it correctly i.e., using the appropriate delete-expression.
From new.delete.single-12:
Requires:
ptr
shall be a null pointer or its value shall represent the address of a block of memory allocated by an earlier call to a (possibly replaced)operator new(std::size_t)
oroperator new(std::size_t, std::align_val_t)
which has not been invalidated by an intervening call tooperator delete
.
This means that in your program, we are allowed to write:
delete [] B;
On the other hand delete B;
is incorrect because we must use array-form of delete-expression here.