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: 323
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