Fixing with try/catch void some_function(int size) { char *fred = new char[size]; try { // do some stuff } catch (...) { delete [ ] fred; throw; } delete [ ] fred; }