The most reliable way of doing this is to use a class for
your argument rather than bare pointers, and have a
constructor from bare pointers, and use reference counting
in the class implementation -- this is almost exactly what
std::string<> already does for you!
Else, you can register the stack pointer in main() (or the
entry function for each thread/fiber), and get the stack
pointer in the called function, and compare -- this is not
entirely portable, because the stack may grow up on some
architectures.
// non-threaded version -- if you use threads or fibers,
// you need one gBase per thread/fiber
char * gBase;
void register_main( char * base ) {
gBase = base;
}
bool is_stack_pointer( char const * ptr ) {
char top[10];
assert( top < gBase ); // else stack grows up
return (ptr < gBase) && (ptr > top);
}
int main() {
...
char junk[ 10 ];
register_main( junk );
...
}
void some_func( char * anArg ) {
if( is_stack_pointer( anArg ) ) {
...
}
}
-----Original Message-----
From: gam...@li...
[mailto:gam...@li...]On Behalf Of
Jacob Turner (Core Design Ltd)
Sent: Thursday, August 19, 2004 9:30 AM
To: gam...@li...
Subject: [GD-Windows] Function to see if a pointer is on the stack
Is there some simple and reliable code for a console or windows app to test
if a pointer value is on the stack or not ?
If the pointer is on the stack (e.g. a string) then we want to copy the
string to heap memory for reuse later on.
Cheers
Jake
-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
_______________________________________________
Gamedevlists-windows mailing list
Gam...@li...
https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows
Archives:
http://sourceforge.net/mailarchive/forum.php?forum_idU5
|