malloc_allocator.h: Fixed the construct function to call global placement new instead of assignment.
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. From-SVN: r79934
This commit is contained in:
parent
8367b9c1e9
commit
58c959212f
3 changed files with 19 additions and 3 deletions
|
@ -1,3 +1,12 @@
|
|||
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.
|
||||
|
|
|
@ -108,7 +108,9 @@ namespace __gnu_cxx
|
|||
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);
|
||||
|
|
|
@ -78,7 +78,12 @@ namespace __gnu_cxx
|
|||
// 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
|
||||
|
@ -93,7 +98,7 @@ namespace __gnu_cxx
|
|||
// 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(); }
|
||||
|
|
Loading…
Add table
Reference in a new issue