On Learn C++, they wrote this to free memory:
int *pnValue = new int; // dynamically allocate an integer
*pnValue = 7; // assign 7 to this integer
delete pnValue;
pnValue = 0;
My question is: “Is the last statement needed to free the memory correctly, completly?”
I thought that the pointer *pnValue was still on the stack and new doesn’t make any sense to the pointer. And if it is on the stack it will be cleaned up when the application leaves the scope (where the pointer is declared in), isn’t it?
Setting a pointer to NULL (or zero) after deleting it is not necessary. However it is good practice. For one thing, you won’t be able to access some random data if you later dereference the pointer. Additionally, you’ll often find code with the following:
So setting the pointer to NULL will ensure it won’t be deleted twice.
Finally, you might find code like this:
And you’d probably want that safety check to be hit.