Go Down

Topic: Realloc returns null, why? (Read 1 time) previous topic - next topic

SanderS

Aug 23, 2008, 07:40 pm Last Edit: Aug 23, 2008, 07:41 pm by SanderS Reason: 1
Hi Everyone,

I finally seem to have located the orign of a bug i was experiencing.
I think realloc works a kind of funky. The situation is as follows:
* i allocate a buffer of 2 bytes size (malloc)
* i reallocate (realloc) the same buffer and ask it to expand to a size of 4 bytes
* the realloc method returns NULL

This is the culprit:
pulsebuffer = (unsigned int *)realloc(pulsebuffer , newsize );

but when i code it as follows, the memory allocation works ok:
   unsigned int * prevpulsebuffer = pulsebuffer;
   pulsebuffer = (unsigned int *) malloc(newsize);
   for (int idx=0;idx<pulsebufferlength;idx++) pulsebuffer[idx] = prevpulsebuffer[idx];
   free(prevpulsebuffer);

What am i missing?

thanks, Sander

mikalhart

Sander,

What happens when you reduce the problem to the following simple test case?

void setup()
{
 Serial.begin(9600);
 void *p = malloc(2);
 Serial.println((int)p, HEX);
 p = realloc(p, 4);
 Serial.println((int)p, HEX);
}

void loop()
{}


On my system, both the malloc and the realloc succeed, printing the address 195 for each.  Assuming this experiment also succeeds similarly for you, I would guess that you have miscalculated "newsize" somehow.  If newsize really is only 4 (print it out to make sure!), then perhaps your have consumed too much of your memory (heap) space somewhere and that's why realloc fails.

Mikal

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy