delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2000/06/09/01:16:39

From: apsh AT ecr DOT mu DOT oz DOT au (Alistair_P SHILTON)
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Strange behaviour of new/delete
Date: 9 Jun 2000 03:37:27 GMT
Organization: Computer Science, University of Melbourne
Lines: 95
Message-ID: <8hpopo$9kr$1@mulga.cs.mu.OZ.AU>
References: <20000608070434 DOT 10895 DOT qmail AT hotmail DOT com>
NNTP-Posting-Host: gromit.ecr.mu.oz.au
X-Trace: mulga.cs.mu.OZ.AU 960521848 9883 128.250.61.61 (9 Jun 2000 03:37:27 GMT)
X-Complaints-To: usenet AT cs DOT mu DOT OZ DOT AU
NNTP-Posting-Date: 9 Jun 2000 03:37:27 GMT
X-Newsreader: TIN [version 1.2 PL2]
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com


Nimrod Abing (n_abing AT hotmail DOT com) wrote:
: >From: apsh AT ecr DOT mu DOT oz DOT au (Alistair_P SHILTON)
: >Reply-To: djgpp AT delorie DOT com
: >To: djgpp AT delorie DOT com
: >Subject: Re: Strange behaviour of new/delete
: >Date: 7 Jun 2000 07:27:55 GMT
: >
: >Is that a no :) ?  Thanks anyway - its just that I've been trying to work 
: >this
: >out for ~4 weeks now with no success, so I thought, just maybe...  oh well,
: >back to the drawing board.  I'll try your suggestion of C++ing it up a bit
: >more and see if it helps.
: >
: >Sorry for not posting the full code, but the program is quite large (~6000
: >
: >over 4 files), and the new and delete statements are quite distant from one
: >another.
: >
: >ps - how do you ckeck for new error?  Sorry if that's a dumb question, but
: >I'm relatively new to C++ (I usually do C).
: >
: >Thanks again.
: >

: [SNIP]

: What you did was use the operator `new' allocate memory for an array of
: objects (in this case doubles). When you use `new' like that, you need to
: `delete' like this:

:      delete [] object_array;
:      //     ^^----- you can use any value here, but it's okay to leave it
:      //             empty.


I was under the impression that the statements:

delete removal[0];
delete removal[1];
delete removal[2];

delete removal;

and

delete [] removal;

would be synonyms in this case?  Perhaps not.  Anyhow, I tried your your
suggestion, and a some other changes, and the error moved to another equally
inexplicable spot.  So I guess that I must have made an error elsewhere and
it just doesn't happen to turn up until this point - back to the drawing
board I guess.

Anyway, thanks for your help.


: And yes, allocating memory using `obj_ptr = new obj_class' is very
: different from obj_ptr = new obj_class[elms]'.

: Also `new' does not return a NULL pointer when it fails to find enough
: memory, it throws a `bad_alloc' exception instead. So checking the result
: of `obj_ptr = new obj_class' for a NULL value is _not_ necessary.
: Instead you should use a `try' block and `catch' any `bad_alloc' that
: `new' might throw.

:      try {
:        obj_ptr = new obj_class;
:      }
:      catch (bad_alloc) {
:      // ... do something in case of bad alloc.
:      }


: ----------------
: _nimrod_a_abing_


: ------------------------------------------
: Homepage: http://www.geocities.com/n_abing

: ________________________________________________________________________
: Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com


--
----------------------------------------------------

Alistair Shilton

http://www.ee.mu.oz.au/pgrad/apsh



- Raw text -


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