On Sat, 2007-12-01 at 18:02 -0500, Brett McCoy wrote:
> On Dec 1, 2007 5:27 PM, Michael Sullivan <[EMAIL PROTECTED]>
> wrote:
> 
> > I know that a segmentation fault is the equivalent of a null pointer
> > exception in Java, but I don't understand why it's happening here.
> My
> > full code is posted at
> > http://www.espersunited.com/~michael/needhelp.txt . Basically the
> > problem is this:
> 
> A segmentation fault can mean you are accessing memory you have no
> permission to use, like if you are trying to access memory you have
> not allocated (null pointer).
> 
> I didn't go through all of your code but a few things stuck out at me.
> 
> One thing I recommend is to stop using char * or char[] and use the
> C++ string class, it'll eliminate some headaches with strings.
> 
> Also, instead of using a plain old array in your battle class, I'd use
> a vector or or a list or similar kind of C++ container class, they are
> a lot more flexible than plain old arrays, especially when it comes to
> adding more entries into it.
> 
> Definitely learn how to use a C++ debugger... if using gdb isn't up
> your alley, get Eclipse, KDevelop or Anjuta (I am assuming you are on
> Linux) and use their graphical debuggers (which probably use gdb
> underneath).
> 
> > class battle
> > {
> > private:
> > Ally party[4];
> > };
> >
> > battle::battle()
> > {
> > party[0] = Ally("Michael", 10, 7);
> > party[1] = Ally("Amy", 8, 13);
> > party[2] = Ally("Feli", 12, 15);
> > party[3] = Ally("Imp", 9, 4);
> > }
> >
> > class Ally : public Character
> > {
> > public:
> > Ally(){}
> > Ally(char*, long, long);
> > ~Ally();
> > };
> >
> > Ally::Ally(char* myname, long h, long m) : Character(myname, h, m)
> > {
> > printf("Arrived in Ally constructor for %s.\n", myname);
> > }
> >
> > Character::Character(char *myName, long myMaxHP, long myMaxMP)
> > {
> > strcpy(name,myName);
> > maxHP = myMaxHP;
> > maxMP = myMaxMP;
> >
> > currentHP = maxHP;
> > currentMP = maxMP;
> > }
> >
> > Now I've tracked the SegFault down to the battle constructor,
> > specifically the line where the 'Amy' Ally is being created. The
> > program enters the Ally constructor, and then SegFaults. I have very
> > little experience with gdb and ddd doesn't work at all. Can anyone
> see
> > the problem with this? Am I out of stack space? Do I need to start
> > using the heap?

I found a handy feature of gdb called 'backtrace' that told me where the
problem was.  It seems I was attempting to call SDL_FreeSurface on a
surface that I haven't gotten around to creating yet...
> 

Reply via email to