Serious Memory Clash: Variables clashing in C

Posted by Soham on Stack Overflow See other posts from Stack Overflow or by Soham
Published on 2011-02-18T15:21:46Z Indexed on 2011/02/18 15:25 UTC
Read the original article Hit count: 291

Filed under:
|
|
int main(int argc, char*argv[])
{
    Message* newMessage;
    Asset* Check;
    //manipulation and initialization of Check, so that it holds proper values.

    newMessage = parser("N,2376,01/02/2011 09:15:01.342,JPASSOCIAT FUTSTK 24FEB2011,B,84.05,2000,0,0",newMessage);
//  MessageProcess(newMessage,AssetMap);
    printf("LAST TRADE ADDRESS %p LAST TRADE TIME %s\n",Check->TradeBook,Check->Time);
}
Message*  parser(char *message,Message* new_Message)
{
    char a[9][256];
    char* tmp =message;
    bool inQuote=0;
    int counter=0;
    int counter2=0;
    new_Message = (Message*)malloc(sizeof(Message));
    while(*tmp!='\0')
    {
        switch(*tmp)
        {
            case ',': if(!inQuote)
                   {    
                    a[counter][counter2]='\0';
                    counter++;
                    counter2=0;
                    }

                  break;
            case '"':
                inQuote=!inQuote;
                break;
            default:
                a[counter][counter2]=*tmp;
                counter2++;
                break;
        }
    tmp++;

    }
        a[counter][counter2]='\0';
        new_Message->type = *a[0];
        new_Message->Time  = &a[2][11];
        new_Message->asset = a[3];
        if(*a[4]=='S')
        new_Message->BS = 0;
        else
        new_Message->BS = 1;
        new_Message->price1=atof(a[5]);
        new_Message->shares1=atol(a[6]);
        new_Message->price2=atof(a[7]);
        new_Message->shares2=atol(a[8]);
        new_Message->idNum = atoi(a[1]);
return(new_Message);
}

Here there is a serious memory clash, in two variables of different scope. I have investigated using gdb and it seems the address of new_Message->Time is equalling to the address of Check->Time.

They both are structures of different types I am trying to resolve this issue, because, when parser changes the value of new_Message->Time it manipulates the contents of Check->Time

Please do suggest how to solve this problem. I have lost(spent) around 10 hours and counting to resolve this issue, and tons of hair.

Soham

© Stack Overflow or respective owner

Related posts about c

    Related posts about gcc