I\'m utilizing a library written by a collegue and discovered that valgrind
was spewing out errors related to the delete
.
The problem was t
Forget about destructors. The difference between new/delete
and new[]/delete[]
is that these are two completely unrelated, independent memory allocation mechanisms. They cannot be mixed. Using delete
to deallocate memory allocated with new[]
is no different than using free
for the same purpose.
The standard says nothing about how the memory will get deleted -- it merely says that to not match the correct new with the correct delete is undefined behavior.
Actually, new[]
followed by delete
usually frees all the memory that was allocated with new[]
, but destructors for the items in that array are not called correctly. (Most of the time -- not that the standard mandates that)
Rather than dynamically allocated arrays, you should consider use of vector
.
If you allocate an array using new[]
, you have to destroy it using delete[]
. In general, the functions operator delete(void*)
and operator delete[](void*)
aren't guaranteed to be the same.
Refer here