* ext/malloc_allocator.h: Fixed the construct function to call
global placement new instead of assignment. Added a check after
the return from malloc to check whether returned pointer is NULL,
and if so, throw std::bad_alloc().
* ext/debug_allocator.h: Added a check in the deallocate function
to check whether the user has passed a NULL pointer or not.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79934
138bc75d-0d04-0410-961f-
82ee72b054a4
+2004-03-24 Dhruv Matani <dhruvbird@gmx.net>
+
+ * ext/malloc_allocator.h: Fixed the construct function to call
+ global placement new instead of assignment. Added a check after
+ the return from malloc to check whether returned pointer is NULL,
+ and if so, throw std::bad_alloc().
+ * ext/debug_allocator.h: Added a check in the deallocate function
+ to check whether the user has passed a NULL pointer or not.
+
2004-03-24 Benjamin Kosnik <bkoz@redhat.com>
* docs/html/20_util/allocator.html: Add bitmap_allocator links.
void
deallocate(pointer __p, size_type __n)
{
- pointer __real_p = __p - _M_extra;
+ if (!__p)
+ abort();
+ pointer __real_p = __p - _M_extra;
if (*reinterpret_cast<size_type*>(__real_p) != __n)
abort();
_M_allocator.deallocate(__real_p, __n + _M_extra);
// about what the return value is when __n == 0.
pointer
allocate(size_type __n, const void* = 0)
- { return static_cast<_Tp*>(malloc(__n * sizeof(_Tp))); }
+ {
+ pointer __ret = static_cast<_Tp*>(malloc(__n * sizeof(_Tp)));
+ if (!__ret)
+ throw std::bad_alloc();
+ return __ret;
+ }
// __p is not permitted to be a null pointer.
void
// 402. wrong new expression in [some_] allocator::construct
void
construct(pointer __p, const _Tp& __val)
- { *__p = __val; }
+ { ::new(__p) value_type(__val); }
void
destroy(pointer __p) { __p->~_Tp(); }