This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

[51] simulation in KeilC question

Hi, The test code is listed as below,

#pragma OT(0)
void main (void)
{
    DATA_MSG *b=NULL;
    DATA_MSG *a=NULL;

    b=(DATA_MSG *)malloc(sizeof(DATA_MSG));
    b->sMsgHeader.MessageType=E_Battery_Status;
    b->sMsgHeader.Extended=1;
    //Plug_Status=0;
    //Varible_Init();
    a=(DATA_MSG *)malloc(sizeof(DATA_MSG));
    a->sMsgHeader.MessageType=E_Get_Country_Info;
    a->sMsgHeader.Extended=0;
    if(b->sMsgHeader.Extended || a->sMsgHeader.Extended)
        EX3=1;
    else
        EX3=0;

I use the keil-C simulator to debug it. I found the pointer a and b point to the same memory location.
It means that the a overwrites b, I don't know why? Anyone knows it? Thanks a lot.

Parents
  • Then your really, seriously do not want to be using dynamic allocation!!

    :0

    Using dynamic allocation will not magically create extra memory from nowhere - it all still has to come out of your 1K of RAM.

    And using dynamic allocation involves overheads - which are probably quite significant relative to that 1K !!

    No, configuring the Heap has nothing to do with your Memory Model.

    If you need to ask, then it is almost certainly not correctly configured - so your use of malloc is almost certainly bound to fail.

    You can google how Dynamic Allocation with malloc & the Heap work; it is standard 'C' stuff - not specific to Keil.

    You have to configure the Heap as part of your project setup - so it really doesn't help you with the problem of knowing your data sizes in advance!

Reply
  • Then your really, seriously do not want to be using dynamic allocation!!

    :0

    Using dynamic allocation will not magically create extra memory from nowhere - it all still has to come out of your 1K of RAM.

    And using dynamic allocation involves overheads - which are probably quite significant relative to that 1K !!

    No, configuring the Heap has nothing to do with your Memory Model.

    If you need to ask, then it is almost certainly not correctly configured - so your use of malloc is almost certainly bound to fail.

    You can google how Dynamic Allocation with malloc & the Heap work; it is standard 'C' stuff - not specific to Keil.

    You have to configure the Heap as part of your project setup - so it really doesn't help you with the problem of knowing your data sizes in advance!

Children
No data