www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2000/10/15/15:15:24

From: "23yrold3yrold" <cbarry AT pangea DOT ca>
Newsgroups: comp.os.msdos.djgpp
Subject: destroy_bitmap in destructor
Date: Sun, 15 Oct 2000 13:21:37 -0500
Lines: 101
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.00.2919.6600
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600
NNTP-Posting-Host: spamkiller
Message-ID: <39e9f547_4@spamkiller.newsfeeds.com>
X-Comments: This message was posted through Newsfeeds.com
X-Comments2: IMPORTANT: Newsfeeds.com does not condone, nor support, spam or any illegal or copyrighted postings.
X-Comments3: IMPORTANT: Under NO circumstances will postings containing illegal or copyrighted material through this service be tolerated!!
X-Report: Please report illegal or inappropriate use to <abuse AT newsfeeds DOT com> You may also use our online abuse reporting from: http://www.newsfeeds.com/abuseform.htm
X-Abuse-Info: Please be sure to forward a copy of ALL headers, INCLUDING the body (DO NOT SEND ATTACHMENTS)
Organization: Newsfeeds.com http://www.newsfeeds.com 73,000+ UNCENSORED Newsgroups.
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

I've been having a lot of trouble with this, so I'm gonna post a fair bit of
code and errors in the hope that SOMEONE can tell me what I'm doing wrong.

Here's a snippet of code for a struct for an enemy in a simple game I'm
making:

struct CEnemy
{
   short int ID;
   BITMAP   *sprite;
   float     x,
             y,
             xvel,
             yvel;
   bool      hit, type;
   short int HP, life;

   CEnemy(int ID, int a, int b, int function);
   ~CEnemy();

   void (*draw)(BITMAP *bitmap, CEnemy *e); // pointer to function that
draws bullet
   bool (*routine)(CEnemy *e);   // pointer to function for updating bullet
   short int var1, var2, var3, var4;  // uses depend on bullet type
}; vector<CEnemy*> E(0);

const int GTop = 500;
const int GBot = 501;

/* Prototypes for enemy behavior
********************************************/
bool Test(CEnemy *e);

/* Constructor
**************************************************************/
CEnemy::CEnemy(int ID, int a, int b, int function):x(a), y(b), life(0)
{
   switch(function)
   {
      case 0: routine = Test;
      switch(ID)
      {
         case GTop: sprite = create_bitmap(200, 190);
                    return;
         case GBot: sprite = create_bitmap(200, 160);
                    return;
      }
   }
}

CEnemy::~CEnemy()
{
   destroy_bitmap(sprite);
}


The problem is in the destructor. If I attempt to empty the vector,.....


   vector<CEnemy*>::size_type Esize  = E.size();

   for(int a = 0 ; a < Esize ; a++){
      delete (E.end() - 1);
      E.pop_back();
   }

I get a crash at runtime, which follows......

Shutting down Allegro
Exiting due to signal SIGSEGV
Page fault at eip=0006a034, error=0006
eax=ff8bfd88 ebx=001321bc ecx=001321c4 edx=001321c0 esi=00131d9c
edi=00131d98
ebp=00131d20 esp=00131d14 program=C:\CHRIS'~1\VERTIC~2\TRANSF~1.EXE
cs: sel=00af  base=83098000  limit=ffd67fff
ds: sel=00b7  base=83098000  limit=ffd67fff
es: sel=00b7  base=83098000  limit=ffd67fff
fs: sel=00c7  base=00000000  limit=0010ffff
gs: sel=00c7  base=00000000  limit=0010ffff
ss: sel=00b7  base=83098000  limit=ffd67fff
App stack: [00131f14..000b1f14]  Exceptn stack: [000b1e6c..000aff2c]

Call frame traceback EIPs:
  0x0006a034 _free+28
  0x00066b33 ___builtin_delete+23, line 0 of new2.cc
  0x00002f63 ___9TestLevel+403, line 39 of TFAA.cpp
  0x00005158 _InitLevel__Fi+44, line 707 of TFAA.cpp
  0x00005289 _PlayGame__Fi+161, line 728 of TFAA.cpp
  0x00003311 _main+233, line 185 of TFAA.cpp
  0x000695d2 ___crt1_startup+178

I'm pretty sure it's the destructor that's doing this, because eliminating
the delete or the destroy_bitmap() seems to fix it, but I see nothing wrong
with it (not exactly complex, is it?). And in the call frame traceback; what
is new2.cc? This file is nowhere to be found on my hard drive. Hopefully
someone here can help me with this; it's driving me batty. Thank you.


Chris


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019