Who modified my local variable?
torriem at chem.byu.edu
Mon Jun 12 06:42:55 MDT 2006
On Mon, 2006-06-12 at 15:58 +0800, Laurent R wrote:
> I met a problem as show below:
> void FunctionA(unsigned char *pLen)
> *pLen = 16;
> printf("T2 %d\r\n", *pLen);
> void FunctionB(void)
> unsigned char ucLen = 0;
> printf("T1 %d\r\n", unLen);
> printf("T3 %d\r\n", unLen);
> It is a multi-process project. One of the process will call FunctionB, but
> the result is not 0->16->16. It is 0->16->0. There are several other
> processes running in the backgroud. But there is no pre-empt process related
> to this function, or re-entry call of this function. I don't know who modify
> my local variable?
> Who can help me to think out other reason to modify my local variable in
> this example?
What does the debugger say?
When you say there are multiple processes, does that mean that these
functions are called simultaneously by different processes? I don't
know what you mean by "no pre-empt process."
Step through your program with a debugger and watch the variable. when
it changes examine the code. My gut feeling is you have memory
corruption going on in another part of your program or these functions
that's clobbering this variable somehow. Is there a reason you need to
pass a pointer to a local (stack-based) variable to another function?
Trying to compile this fragment says that unLen is undeclared. Did you
mean to say "ucLen?" When I change it to ucLen, the fragment works just
as you would expect (0,16,16), so the problem is definitely in your
> Express yourself instantly with MSN Messenger! Download today it's FREE!
> PLUG: http://plug.org, #utah on irc.freenode.net
> Unsubscribe: http://plug.org/mailman/options/plug
> Don't fear the penguin.
More information about the PLUG