Search code examples
cmallocsizeof

Using sizeof() on malloc'd memory


Possible Duplicate:
newbie questions about malloc and sizeof

I am trying to read strings into a program. When I noticed that the strings were sometimes being corrupted, I tried the following code:

 void *mallocated = malloc(100);
 printf("sizeof(mallocated) = %d\n", sizeof(mallocated));

According to my program, the size of mallocated was 8, even though I allocated 100 bytes for it. Because of this, whenever I try to store a string longer than 8 bytes, everything after the 8th byte will sometimes disappear. Why is this happening, and how can I prevent it?


Solution

  • Because the size of the "string" pointer is 8 bytes. Here are some examples of using sizeof() with their appropriate "size". The term size_of() is sometimes deceiving for people not used to using it. In your case, the size of the pointer is 8 bytes.. below is a representation on a typical 32-bit system.

    sizeof (char)   = 1
    sizeof (double) = 8
    sizeof (float)  = 4
    sizeof (int)    = 4
    sizeof (long)   = 4
    sizeof (long long)  = 8
    sizeof (short)  = 2
    sizeof (void *) = 4
    
    sizeof (clock_t)    = 4
    sizeof (pid_t)  = 4
    sizeof (size_t) = 4
    sizeof (ssize_t)    = 4
    sizeof (time_t) = 4
    

    Source

    You are leaving out how you are determining your string is disappearing (char array). It is probably being passed to a function, which you need to pass the explicit length as a variable or track it somewhere. Using sizeof() won't tell you this.

    See my previous question about this and you'll see even my lack of initial understanding.