Advertisement
Guest User

Untitled

a guest
Apr 16th, 2014
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.61 KB | None | 0 0
  1. struct A
  2. {
  3. //~A() {}
  4. };
  5.  
  6. int main()
  7. {
  8. A* a = new A[10];
  9. delete a; // heap corruption when the user destructor is defined
  10.  
  11. int *b = new int[100];
  12. delete b; // no heap corruption
  13. };
  14.  
  15. struct NonTrivialDestructor {
  16. std::string s;
  17. };
  18. struct NotTrivialEither : NonTrivialDestructor {};
  19.  
  20. v
  21. +------+---+---+---+--
  22. | size | T | T | T |...
  23. +------+---+---+---+--
  24. ^
  25.  
  26. pseudo-delete[](T * p) {
  27. size_t *size = reinterpret_cast<size_t*>(p)-1;
  28. for (size_t i = 0; i < *size; ++i)
  29. (p+i)->~T();
  30. deallocate(size);
  31. }
  32.  
  33. v
  34. +---+---+---+--
  35. | T | T | T |...
  36. +---+---+---+--
  37. ^
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement