Hi!
First of all, I hope my problem is not too loosely tied to the
"standard C++" that is the topic of this group.
I have some code that exhibits a strange behaviour: on
one computer, where I compile with g++-3.2 it compiles and
works fine, on another computer, whether I compile with g++-3.0
or g++-2.95 (unfortunately 3.2 is not available) it crashes
with a segmentation violation on runtime.
I tried to find the offending code by commenting out most
of my program, and found out that the program crashes upon
entering an init() method of one of the objects. The bulk of
the function is never executed, since if I change its first line to
a std::cerr << "I'm here" << std::endl, it never appears on my
console.
Even if I try to execute this init() function as the first line of
main(), my program still crashes. As I can't use a debugger
on the system where it crashes, and it works fine on the
system where I have the debugger, I'm running out of options.
I've now come to the point, where if I start my main() with
a debug dump to cerr and then the offending function, I get
the debug dump at runtime, but not the debug dump of the
offending function. That leads me to the conclusion, that
something that runs before main is causing the trouble
(like overwriting memory, etc.). My question is...
/*** here's my C++ question ***/:
what is "the stuff" that runs before main()? I could recall
that top-level objects' constructors could be called
before main() and I double-checked these.
I also checked my statics and found nothing suspicious.
Is there anything else that runs any code before main
(apart from platform-specific stuff that goes before any
actual C++ code)?
Perhaps some of you can tell, by experience, what should
I look for? I've spent six hours now looking for the exact cause
and I'm getting frustrated. In plain-old-DOS I'd use a debugger
to single-step the code, unfortunately I can't do that now.
The assembler output of the compiler looks too complicated too.
TIA,
- J.
PS. The object whose method crashes my program is a child
object of a global object, like in
class B;
class A {
public:
B foo;
};
class B {
public:
init();
};
A global;
int main() {
global.foo.init(); // crashes
};
Of course this simple program works. That's why I'm lead to
believe there's some init stuff (not presented here, I can't post
the actual code because it's too long) that causes some hidden
trouble.