Who modified my local variable?
Laurent R
rj45rt at hotmail.com
Mon Jun 12 09:41:53 MDT 2006
Hi, Michael:
I made a mistake on the example. It should be 'ucLen' instead of 'unLen'.
There is no specific reason to use the pointer of local variable
(stack-based) to call another function. I just do not want to allocate
memory and free it again.
Multi-process means there are several processes running on the system. No
pre-empt process means other process can not pre-empt the process which
calls FunctionB.
I guess there is a mistake in the system. But I can't find any clue. There
are many libs for me to include and reference. I need some clue to find a
way to explain and investigate this problem.
Br/Laurent
>From: Michael Torrie <torriem at chem.byu.edu>
>Reply-To: Provo Linux Users Group Mailing List <plug at plug.org>
>To: Provo Linux Users Group Mailing List <plug at plug.org>
>Subject: Re: Who modified my local variable?
>Date: Mon, 12 Jun 2006 06:42:55 -0600
>
>On Mon, 2006-06-12 at 15:58 +0800, Laurent R wrote:
> > Hi,
> > I met a problem as show below:
> >
> > void FunctionA(unsigned char *pLen)
> > {
> > *pLen = 16;
> > printf("T2 %d\r\n", *pLen);
> > return;
> > }
> >
> > void FunctionB(void)
> > {
> > unsigned char ucLen = 0;
> > printf("T1 %d\r\n", unLen);
> > FunctionA(&ucLen);
> > printf("T3 %d\r\n", unLen);
> > return;
> > }
> >
> > 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
>surrounding code.
>
> > Br/Laurent
> >
> > _________________________________________________________________
> > Express yourself instantly with MSN Messenger! Download today it's FREE!
> > http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
> >
> >
> > /*
> > PLUG: http://plug.org, #utah on irc.freenode.net
> > Unsubscribe: http://plug.org/mailman/options/plug
> > Don't fear the penguin.
> > */
> >
>
>/*
>PLUG: http://plug.org, #utah on irc.freenode.net
>Unsubscribe: http://plug.org/mailman/options/plug
>Don't fear the penguin.
>*/
_________________________________________________________________
Don't just search. Find. Check out the new MSN Search!
http://search.msn.com/
More information about the PLUG
mailing list