I have a question about the behavior of some code I have written: Packet Packet_str; when I declare this structure in my main program and then check its memory location via a printf statement and hyperterminal it says it is 0000. This seems to cause problems in the program I am guessing that something thisnk that this is NULL, but... when i check to see if it is NULL or even (void *) 0 it is false but is true only when I check if it is 0x0000. One way I have been able to get around this is to create a variable which i do not use simply to make Packet_str at a different address than 0000. I have included the following code to help better understand my problem. Packet_str gets passed to this function which uses it under the var name MyPacI. Buffer is an unsigned char * in the Packet structure. Also Packet_str is passed in by reference. if( MyPacI->Buffer == NULL)/*false*/ printf("1:Unable to malloc memory!\n"); else if(MyPacI->Buffer == (void *) 0)/*false*/ printf("2:Unable to malloc memory!\n"); else if(MyPacI->Buffer == 0x0000)/*true*/ printf("3:Unable to malloc memory!\n"); the above is true when I do not make the dummy variable in main. If I make a Packet *dummy variable it offsets the Packet_str to memory location 0003 and all works correctly, but... if in main I set dummy = NULL it acts as if I never created the dummy variable. I only set dummy to NULL to avoid optimization on other compilers. It is not needed under keil. In short I am wondering why this all happens. Why do functions assume 0000 = NULL but not vise-versa, and is there another way to make Packet_str not be at address 0000 other than making an unused variable?
I see NULL pointers, I see malloc. Are you sure you should be programming a '51, not a PC. Erik