0023033: Standard_MMgrOpt::Reallocate behavior must be similar to "realloc"
authordbv <dbv@opencascade.com>
Wed, 21 Mar 2012 11:16:30 +0000 (15:16 +0400)
committerdbv <dbv@opencascade.com>
Fri, 23 Mar 2012 10:59:25 +0000 (14:59 +0400)
Changes :
Standard_MMgrOpt::Reallocate has been modified to allocate new memory block if NULL pointer has been passed.

src/Standard/Standard_MMgrOpt.cxx
src/Standard/Standard_MMgrOpt.hxx

index bcb39e1..ce8751a 100755 (executable)
@@ -718,6 +718,12 @@ void Standard_MMgrOpt::FreePools()
 Standard_Address Standard_MMgrOpt::Reallocate(Standard_Address&   theStorage,
                                               const Standard_Size theNewSize)
 {
+  // if theStorage == NULL, just allocate new memory block
+  if (!theStorage)
+  {
+    return Allocate(theNewSize);
+  }
+  
   Standard_Size * aBlock = GET_BLOCK(theStorage);
   Standard_Address newStorage = NULL;
 
index d7a626c..dcbcb4e 100755 (executable)
@@ -104,7 +104,8 @@ class Standard_MMgrOpt : public Standard_MMgrRoot
   //! Allocate aSize bytes; see class description above
   Standard_EXPORT virtual Standard_Address Allocate(const Standard_Size aSize);
   
-  //! Reallocate previously allocated aPtr to a new size; aPtr is nullified
+  //! Reallocate previously allocated aPtr to a new size; aPtr is nullified.
+  //! In case that aPtr is null, the function behaves exactly as Allocate.
   Standard_EXPORT virtual Standard_Address Reallocate(Standard_Address& aPtr, 
                                                       const Standard_Size aSize);