Mike Nordell wrote:
> To try to explain. Using the MSVC compiler, a piece of code such as:
> 
>     something_t* pSomething = getSometPtr();
>     int some_int = pSomething->getSomeInt();
> 
> and assuming getSomeInt() is an inlined function, it generates assembler
> code like:
> 
>     [... allocate space for some_int on the stack]
>     call getSomePtr
>     move some_int, [eax+XXh]
> 
> where XXh is the hexadecimal offset of the member from the beginning of the
> type something_t.
> 
> So long as getSomePtr() returns a valid pointer to a something_t object all
> is fine. But if getSomePtr() for some reason returen e.g. NULL, and the
> client code doesn't check for NULL pointer, then it's a crash waiting to
> happen.


Ahha! I guess calling a pointer sets the eax register.  (Seems clearly
implied by the way Mike wrote it, but I didn't realize that.)

I might get the hang of this someday. ;-) 

Randy Kramer

Reply via email to