Dynamic memory allocation issue

Robert S. Grimes rsg at alum.mit.edu
Tue Jan 20 17:55:00 UTC 2009


Torsten Landschoff wrote:
> Robert S. Grimes wrote:
>   
>> I've run across this before, and I've used workarounds, later to find 
>> the problem went away.  I thought it was something I was doing wrong 
>> that I somehow stopped doing, as it didn't happen again for some 
>> weeks/months - until this morning.  I added code like this:
>>
>>   uint8_t* faultTable_;
>>
>>   printk("Getting new fault table of size %d\n", sizeInBytes_);
>>   faultTable_ = new uint8_t(sizeInBytes_);
>>   
>>     
> Here's the bug. You want to call new uint8_t[sizeInBytes_]
> Note the brackets. What you are doing is to create a single byte on the
> heap, initialized to sizeInBytes_ (in your case 36). But you want 36
> bytes and don't  care for initialization in this case (as you overwrite
> it yourself afterwards).
>
>   
Of course!  And I know C++ better than that!  But you know how it is - 
sometimes you can't see the trees for all the forest!

And looking back in my revision control system, I had indeed made the 
mistake a year ago, and somehow or other fixed it - after using a 
temporary static array until I really needed to vary it.  When I came 
back to that, I must have noticed the error and fixed it without it 
registering.  Only thing I can say in my defense is that every other 
instance of array allocation I did do correctly - or is that further 
evidence against me?!

Thanks, Torsten!

-Bob




More information about the users mailing list