I need a C++ refresher. Why does this gives a memory exception?
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
I need a C++ refresher. Why does this gives a memory exception?
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
pear = new char[1024];
Memory for 1024 character is allocated from heap and pear
points to the start of it.
pear = "happy go lucky";
pear
now points to the string literal which resides in the read-only segment and the previously allocated memory is leaked.
delete [] pear;
You try to free the read-only string, which is a undefined behaviour manifested as a runtime exception.
pear = "happy go lucky";
This replaces the pointer allocated by new char[]
. So now your delete[] pear
tries to free the statically allocated string.
That's bad. You can only delete
what you allocate with new
. And since you overwrote (and lost) that pointer, you can't delete
it.
What you're doing is assigning pear
to an allocated array of chars on the heap, and then reassigning it to point to the string which is in a static location. If you try to delete that it will error because you're not supposed to delete stuff in that static location.
© 2022 - 2024 — McMap. All rights reserved.
char* pear = new char[1024];
? – Edacity