On Mon, 29 Sep 2003, Gerry Reno wrote: > I'm having a problem with gcc 3.3.1. Here is a sample program that > demos the problem: > > // test.c > #include <stdio.h> > #include <windows.h> > > typedef struct abc { > HANDLE h1; > HANDLE h2; > } XYZ; > > XYZ * somefunc () { > XYZ xyz; > XYZ *ptr = &xyz; > > ptr->h1 = (HANDLE) 99; > ptr->h2 = (HANDLE) 88; > > printf("somefunc: ptr->h1 = %d\n",ptr->h1); > printf("somefunc: ptr->h2 = %d\n",ptr->h2); > > return (ptr); > } > > int main(void) { > XYZ *ptr2; > > ptr2 = somefunc (); > printf("main: ptr2->h1 = %d\n",ptr2->h1); > printf("main: ptr2->h2 = %d\n",ptr2->h2); > > } > ------------------------------ > > -- results -- > somefunc: ptr->h1 = 99 > somefunc: ptr->h2 = 88 > main: ptr2->h1 = 99 > main: ptr2->h2 = 99 > > > And sometimes it will give me really large values for main: ptr2-h2 > like 4043574. > > ---------------------- > Env: > Cygwin 1.5.5 > gcc 3.3.1 > > ===== > Gerry Reno
Tsk, tsk, tsk, Gerry, you should really know better than to return a pointer to an automatic variable (a struct, in this case). That's one of the things K&R explicitly warns against. You're lucky it worked at all in the previous versions of gcc. If you want to return a pointer to something from a function, either make it global, or static, or allocate it dynamically. Igor -- http://cs.nyu.edu/~pechtcha/ |\ _,,,---,,_ [EMAIL PROTECTED] ZZZzz /,`.-'`' -. ;-;;,_ [EMAIL PROTECTED] |,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski, Ph.D. '---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow! "I have since come to realize that being between your mentor and his route to the bathroom is a major career booster." -- Patrick Naughton -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/