473,796 Members | 2,655 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

malloc (0)

Hey can any one tell me what malloc 0 does, it assigns space in memory
i know that but is it usable and how many bytes does it allocate ,
allocation of 0 bytes is difficult-to-digest concept and still in the
memory.

Jul 4 '06
14 12211
Joe Wright wrote:
Bhaskar wrote:
>Hey can any one tell me what malloc 0 does, it assigns space in memory
i know that but is it usable and how many bytes does it allocate ,
allocation of 0 bytes is difficult-to-digest concept and still in the
memory.
Try this.

#include <stdio.h>
#include <stdlib.h>
int main(void) {
void *vp = malloc(0);
printf("malloc( 0) returned %p\n", vp);
return 0;
}

Here at home,

malloc(0) returned 902a0

vp is non-null and so I assume that malloc did what I asked and
allocated 0 bytes successfully. Do you think I should free(vp) to avoid
a leak?
Not in this program, but in general yes! Otherwise, you
may well leak some extra "bookkeepin g" memory that malloc()
uses to keep track of each zero-length allocation. Try

#include <stdio.h>
#include <stdlib.h>
int main(void) {
unsigned long count = 0;
while (malloc(0) != NULL) {
if (++count == 0) {
printf ("More than %lu successful allocations"
" -- giving up.\n", (unsigned long)-1);
return 0;
}
}
printf ("%lu successful allocations before NULL\n",
count);
return 0;
}

"Here at home," I get

72960776 successful allocations before NULL

.... plus a lot of disk activity and some system alerts about
increasing the size of the page file. Strongly suggestive of
leakage, I'd say.

--
Eric Sosman
es*****@acm-dot-invalid.org
Jul 4 '06 #11
Eric Sosman wrote:
Joe Wright wrote:
>Bhaskar wrote:
>>Hey can any one tell me what malloc 0 does, it assigns space in memory
i know that but is it usable and how many bytes does it allocate ,
allocation of 0 bytes is difficult-to-digest concept and still in the
memory.
Try this.

#include <stdio.h>
#include <stdlib.h>
int main(void) {
void *vp = malloc(0);
printf("malloc( 0) returned %p\n", vp);
return 0;
}

Here at home,

malloc(0) returned 902a0

vp is non-null and so I assume that malloc did what I asked and
allocated 0 bytes successfully. Do you think I should free(vp) to
avoid a leak?

Not in this program, but in general yes! Otherwise, you
may well leak some extra "bookkeepin g" memory that malloc()
uses to keep track of each zero-length allocation. Try

#include <stdio.h>
#include <stdlib.h>
int main(void) {
unsigned long count = 0;
while (malloc(0) != NULL) {
if (++count == 0) {
printf ("More than %lu successful allocations"
" -- giving up.\n", (unsigned long)-1);
return 0;
}
}
printf ("%lu successful allocations before NULL\n",
count);
return 0;
}

"Here at home," I get

72960776 successful allocations before NULL

... plus a lot of disk activity and some system alerts about
increasing the size of the page file. Strongly suggestive of
leakage, I'd say.
Leaks like a sieve. 73 million useless calls to malloc(0) and you
couldn't free() them if you wanted to. Crash and Burn.

--
Joe Wright
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---
Jul 4 '06 #12
On 4 Jul 2006 12:20:41 -0700, in comp.lang.c , "Harald van D?k"
<tr*****@gmail. comwrote:
>Lew Pitcher wrote:
>The key phrase is "implementa tion defined".
....
>>As I read it, so long as your C compiler/environment's
implementati on documents it, malloc(0) could legitimately launch
Russian ICBM missles
>Unless either returning a null pointer by itself in a user function, or
calling malloc with a nonzero size, is allowed to launch missiles, no,
malloc(0) isn't allowed to launch missiles either.
Actually it is, but the implementation must define this behaviour. The
DS9K's C compiler provides a very similar feature.
--
Mark McIntyre

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it."
--Brian Kernighan
Jul 4 '06 #13
Mark McIntyre wrote:
On 4 Jul 2006 12:20:41 -0700, in comp.lang.c , "Harald van D?k"
<tr*****@gmail. comwrote:
>Lew Pitcher wrote:
>>The key phrase is "implementa tion defined".
...
>>As I read it, so long as your C compiler/environment's
implementatio n documents it, malloc(0) could legitimately launch
Russian ICBM missles
>Unless either returning a null pointer by itself in a user function, or
calling malloc with a nonzero size, is allowed to launch missiles, no,
malloc(0) isn't allowed to launch missiles either.

Actually it is, but the implementation must define this behaviour. The
DS9K's C compiler provides a very similar feature.
Although it hardly matters in this less than serious context, the DS9K
compiler would not be conforming for doing so. (Which would be odd to say
the least, since the DS9K manufacturer is usually very careful about this
sort of thing.)

N1124:
"3.4.1 implementation-defined behavior
unspecified behavior where each implementation documents how the choice is made"

"3.4.4 unspecified behavior
use of an unspecified value, or other behavior where this International
Standard provides two or more possibilities and imposes no further
requirements on which is chosen in any instance"

Even the most liberal interpretation of these statements requires that, if
the standard gives a choice between behaviors and states the actual behavior
is "implementa tion-defined", then the choice must be made from the behaviors
given and the choice itself must be documented. The implementation is not
allowed to implement additional or replacement behavior, not even if it
documents it.

The alternative would make "unspecifie d behavior" a synonym for "undefined
behavior", which is clearly not the intent.

S.
Jul 4 '06 #14
"Kiru Sengal" <ki*********@gm ail.comwrites:
Bhaskar wrote:
>Hey can any one tell me what malloc 0 does, it assigns space in memory
i know that but is it usable and how many bytes does it allocate ,
allocation of 0 bytes is difficult-to-digest concept and still in the
memory.

I believe it returns NULL.
This is one possible implementation.
It may also return a unique address that may not be dereferenced.
--
int main(void){char p[]="ABCDEFGHIJKLM NOPQRSTUVWXYZab cdefghijklmnopq rstuvwxyz.\
\n",*q="kl BIcNBFr.NKEzjwC IxNJC";int i=sizeof p/2;char *strchr();int putchar(\
);while(*q){i+= strchr(p,*q++)-p;if(i>=(int)si zeof p)i-=sizeof p-1;putchar(p[i]\
);}return 0;}
Jul 5 '06 #15

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

19
683
by: john smith | last post by:
Can someone please explain to me what is happening when I do a malloc(0). This is what I did. int* p = (int*)malloc(0); Then I printed the value of p and of course it was non-null. But has it allocated memory or what?
34
6446
by: Richard Hunt | last post by:
I'm sorry for asking such a silly question, but I can't quite get my head around malloc. Using gcc I have always programmed in a lax C/C++ hybrid (which I suppose is actually c++). But I have started messing around in Plan 9, and that sort of thing is totally no go there :). Is this correct to allocate memory for my struct? It works on my computer, but I'm suspicious that I'm doing it wrong. --
231
23250
by: Brian Blais | last post by:
Hello, I saw on a couple of recent posts people saying that casting the return value of malloc is bad, like: d=(double *) malloc(50*sizeof(double)); why is this bad? I had always thought (perhaps mistakenly) that the purpose of a void pointer was to cast into a legitimate date type. Is this wrong? Why, and what is considered to be correct form?
7
2217
by: Rano | last post by:
/* Hello, I've got some troubles with a stupid program... In fact, I just start with the C language and sometime I don't understand how I really have to use malloc. I've readden the FAQ http://www.eskimo.com/~scs/C-faq/faq.html but it doesn't seem to answer my questions... So, I've made an example behind, with some included questions...
20
10763
by: spasmous | last post by:
main() { float * f; initialize_f(f); // ...use f for processing free(f); }
15
2591
by: Martin Jørgensen | last post by:
Hi, I have a (bigger) program with about 15-30 malloc's in it (too big to post it here)... The last thing I tried today was to add yet another malloc **two_dimensional_data. But I found out that malloc always returned null at this moment and the program exited (even though if I malloc'ed only 20 bytes or something)... Then I googled for this problem and found something about a memory pool??? Is that standard C? I didn't understand it,...
68
15718
by: James Dow Allen | last post by:
The gcc compiler treats malloc() specially! I have no particular question, but it might be fun to hear from anyone who knows about gcc's special behavior. Some may find this post interesting; some may find it off-topic or confusing. Disclaimers at end. The code samples are intended to be nearly minimal demonstrations. They are *not* related to any actual application code.
40
2606
by: Why Tea | last post by:
What happens to the pointer below? SomeStruct *p; p = malloc(100*sizeof(SomeStruct)); /* without a cast */ return((void *)(p+1)); /* will the returned pointer point to the 2nd struct? */ Seems to me there is no guarantee it will. /Why Tea
71
19141
by: desktop | last post by:
I have read in Bjarne Stroustrup that using malloc and free should be avoided in C++ because they deal with uninitialized memory and one should instead use new and delete. But why is that a problem? I cannot see why using malloc instead of new does not give the same result.
23
2733
by: raphfrk | last post by:
I am having an issue with malloc and gcc. Is there something wrong with my code or is this a compiler bug ? I am running this program: #include <stdio.h> #include <stdlib.h> typedef struct pxl { double lon, lat;
0
10465
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10242
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10200
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
10021
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
1
7558
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
5453
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
5582
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
4127
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3744
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.