HI Malloc(0) did not reaturn NULL; that was the fix for. I am reading the IEEE spec how malloc should work, and it exists two diffent implement of it. and some exprenet on diffent windows platfrom show diffent behvior about malloc(0)
----- Original Message ----- From: "Gunnar Dalsnes" hardon@online.no To: "ReactOS Development List" ros-dev@reactos.org Sent: Saturday, June 03, 2006 6:16 PM Subject: Re: [ros-dev] [ros-diffs] [greatlrd] 22195: make malloc,calloc and some other function return NULL if size is 0
Was the changes made to fix something? If not: don't fix whats not broken.
MSDN: The return value is NULL if the size is zero and the buffer argument is not NULL, or if there is not enough available memory to expand the block to the given size. In the first case, the original block is freed. In the second, the original block is unchanged.
Magnus Olsen wrote:
Maybe we should add free to realloc and expand to avoid memmory leak ??
NO!!!!!!!!!!!!! MSDN says the memory will not be freed if the call fails, so the caller is free to continue to use the memory for whatever he likes.
I know realloc fail in windows it can create memory leak
MSDN: The return value is NULL if the size is zero and the buffer argument is not NULL, or if there is not enough available memory to expand the block to the given size. In the first case, the original block is freed. In the second, the original block is unchanged.
So, if realloc fails in windows it WILL ALWAYS create a memory leak (unless you free the memory urself offcourse:-)
text from internet how malloc should work
With Internet do you mean MSDN? Every implementation of malloc behave different. We only want it to behave like the Windows version...
" If the size of the space requested is 0, the behavior is implementation-defined: the value returned shall be either a null pointer or a unique
pointer."
MSDN: If size is 0, malloc allocates a zero-length item in the heap and returns a valid pointer to that item.
But most devloper assume malloc will return NULL if size is 0 But some windows platfroms it return vaild pointer.
The question is how should we handle it in reactos, return NULL or vaild pointer for this case ?
Don't try to be smart, just do it like it says on MSDN.
BTW: The original code looks correct to me.
----- Original Message ----- From: "Thomas Weidenmueller" w3seek@reactos.com To: "ReactOS Development List" ros-dev@reactos.org Sent: Saturday, June 03, 2006 4:39 PM Subject: Re: [ros-dev] [ros-diffs] [greatlrd] 22195: make malloc, calloc
and
some other function return NULL if size is 0
Royce Mitchell III wrote:
@@ -60,6 +66,9 @@ */ void* realloc(void* _ptr, size_t _size) {
- if ( _size == 0)
return NULL;- if (!_ptr) return malloc(_size); if (_size) return HeapReAlloc(hHeap, 0, _ptr, ROUND_SIZE(_size)); free(_ptr);
@@ -71,6 +80,9 @@ */
umm... shouldn't we call free() if we're going to return NULL because size is 0?
realloc never frees the memory if it fails.
Also, the free() at the bottom is never called now.
it's wrong and shouldn't even be there ;)
void* _expand(void* _ptr, size_t _size) {
- if ( _size == 0)
return NULL;- return HeapReAlloc(hHeap, HEAP_REALLOC_IN_PLACE_ONLY, _ptr,
ROUND_SIZE(_size));
}
Again, shouldn't we free the existing buffer if we're returning NULL because size is 0?
no, same as with realloc.
- Thomas
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev