From the comp.lang.c FAQ <http://www.eskimo.com/~scs/C-faq/top.html> >Question 11.26 >What should malloc(0) do? Return a null pointer or a pointer to 0 bytes? > > The ANSI/ISO Standard says that it may do either; the behavior is >implementation-defined > References: ANSI Sec. 4.10.3 > ISO Sec. 7.10.3 > PCS Sec. 16.1 p. 386 A pointer to 0 bytes? Yikes. I was curious to see what happens when you malloc(0) on Solaris. Turns out Sun's library does indeed return a non-NULL pointer. Did some more playing around and discovered that malloc(-100) also returns a non-NULL pointer, which can even be used! (It trashes random parts of memory.) Interestingly malloc(0) causes a sigIOT on Digital Unix. Which brings me to my point/question. Should the CREATE/RECREATE macros disallow this behavior? #define CREATE(result, type, number) do {\ if ((number <= 0) || \ !((result) = (type *)calloc((number),sizeof(type))))\ { perror("malloc failure"); abort(); } } while(0) #define RECREATE(result,type,number) do {\ if ((number < 0) || \ !((result)=(type*)realloc((result),sizeof(type)*(number))))\ { perror("realloc failure"); abort(); } } while(0) Is the overhead too high? Should the configure script check what malloc()ing non-positive values do on each system and add the check to the macros if necessary? +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST