Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > C++ nothrow new() problem under Irix

Reply
Thread Tools

C++ nothrow new() problem under Irix

 
 
Roger Davis
Guest
Posts: n/a
 
      02-19-2005
I am trying to use nothrow new() and am encountering what seems
to be a bug in the SGI/Irix C++ environment. The following
program runs OK under Solaris and Linux, but dumps core at the
delete[] statement under Irix. Is this really an SGI implementation bug,
or have I done something stupid? (Other than trying to use nothrow
new(), that is )

#include <new>
#include <stdexcept>

std::nothrow_t NoThrow;

class Junk {
public:
Junk();
~Junk();
};

Junk::Junk() {
(void) fprintf(stderr, "constr\n"); (void) fflush(stderr);
}

Junk::~Junk() {
(void) fprintf(stderr, "destr\n"); (void) fflush(stderr);
}

main() {
Junk *jnk;

if ((jnk= new(NoThrow) Junk[5]) == (Junk *) 0) {
(void) fprintf(stderr, "memory allocation error\n");
exit(-1);
}

delete[] jnk;
}

My debugger stack looks like this:

_kill()
_raise()
abort()
_array_pointer_not_from_vec_new()
__array_delete_general2()
__vec_delete2()
main() <---- stopped on the delete[] statement

If I use regular new() instead, i.e.,

jnk= new Junk[5];

then the delete[] works OK under Irix. Do I need to be using some
special form of delete[] to indicate that the new() was called with
nothrow? I have seen no documentation anywhere that indicates that
I should, but maybe I am not looking in the right places.

I also tried

float *f;

f= new(NoThrow) float[100];
delete[] f;

under Irix and that works OK. The problem seems to occur only when
using delete[] on a non-primitive.

Thanks!


--
Roger Davis
University of Hawaii/SOEST
http://www.velocityreviews.com/forums/(E-Mail Removed)
 
Reply With Quote
 
 
 
 
David Anderson
Guest
Posts: n/a
 
      02-20-2005
In article <cv6cse$4gp$(E-Mail Removed)>,
Roger Davis <(E-Mail Removed)> wrote:
>I am trying to use nothrow new() and am encountering what seems
>to be a bug in the SGI/Irix C++ environment. The following


This is the subject of bug-id 862202.
(We added your report to that bug.)

Latest EDG front ends give a warning message about this
source code of yours, but we are not yet sure if this
warning is real or simply a mistaken (on our part)
integration of EDG front-end source.

I'm not a C++ language lawyer, but if I had to guess I'd guess
this is likely our bug, either in our runtime or our integration
of the EDG front end.

Sorry.
David Anderson [Not an official SGI spokesperson...]
PS: google 'nothrow new' to find the gotw (Guru Of
The Week) notes on nothrow. Before you use it too much

PPS: IRIX CC has -LANG:exceptions=OFF to turn C++
into an older-style (before exceptions) so new returns 0
on failure. In IRIX virtual swap (like in Linux)
can mean malloc will succeed apparently but reference to
the memory can fail (Irrelevant Historical note: IRIX created
virtual swap before Linux had the concept).
 
Reply With Quote
 
 
 
 
Joseph Michaud
Guest
Posts: n/a
 
      02-23-2005
In article <cv6cse$4gp$(E-Mail Removed)>,
Roger Davis <(E-Mail Removed)> wrote:
> I am trying to use nothrow new() and am encountering what seems
> to be a bug in the SGI/Irix C++ environment. The following
> program runs OK under Solaris and Linux, but dumps core at the
> delete[] statement under Irix. Is this really an SGI implementation bug,
> or have I done something stupid? (Other than trying to use nothrow
> new(), that is )
>
> #include <new>
> #include <stdexcept>
>
> std::nothrow_t NoThrow;
>
> class Junk {
> public:
> Junk();
> ~Junk();
> };
>
> Junk::Junk() {
> (void) fprintf(stderr, "constr\n"); (void) fflush(stderr);
> }
>
> Junk::~Junk() {
> (void) fprintf(stderr, "destr\n"); (void) fflush(stderr);
> }
>
> main() {
> Junk *jnk;
>
> if ((jnk= new(NoThrow) Junk[5]) == (Junk *) 0) {
> (void) fprintf(stderr, "memory allocation error\n");
> exit(-1);
> }
>
> delete[] jnk;
> }
>
> My debugger stack looks like this:
>
> _kill()
> _raise()
> abort()
> _array_pointer_not_from_vec_new()
> __array_delete_general2()
> __vec_delete2()
> main() <---- stopped on the delete[] statement
>
> If I use regular new() instead, i.e.,
>
> jnk= new Junk[5];
>
> then the delete[] works OK under Irix. Do I need to be using some
> special form of delete[] to indicate that the new() was called with
> nothrow? I have seen no documentation anywhere that indicates that
> I should, but maybe I am not looking in the right places.
>
> I also tried
>
> float *f;
>
> f= new(NoThrow) float[100];
> delete[] f;
>
> under Irix and that works OK. The problem seems to occur only when
> using delete[] on a non-primitive.


This may be an issue with unsupported placement array new on
an older compiler.

Please provide the compiler/linker versions, and the c++_eoe
and compiler_eoe versions, and the compile/link command.

And the IRIX OS version (just because).

Joe
--
------------------------------------------------------------------------
Joseph Michaud - SGI Apps Eng 978-562-8894 x483-8894 (E-Mail Removed)
 
Reply With Quote
 
Roger Davis
Guest
Posts: n/a
 
      02-25-2005
> Please provide the compiler/linker versions, and the c++_eoe
> and compiler_eoe versions, and the compile/link command.


% CC -version
MIPSpro Compilers: Version 7.3.1.3m

% ld -V
ld32: INFO 153: Version 7.30.

c++_eoe 7.3.1.3m
compiler_eoe 7.3.1.3m

% CC -o junk -g junk.cc
% ./junk
constr
constr
constr
constr
constr
Abort (core dumped)

> And the IRIX OS version (just because).


eoe IRIX Execution Environment, 6.5.16m

(Thanks for looking into this, Joe.)
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
delete(nothrow) Gianni Mariani C++ 10 01-02-2009 05:26 AM
new, delete and nothrow Alex Vinokur C++ 4 11-23-2006 02:09 PM
Is there a way to write a memory leak detector supporting new(nothrow)? Lighter C++ 1 08-18-2006 06:11 AM
nothrow and exceptions Dave C++ 4 10-20-2003 01:57 AM
Test failure of ../lib/ExUtils/t/Constant.t in perl 5.8.0 under IRIX 6.5.20m (IP35 processor) Andrea M. Segovia Perl 0 08-28-2003 05:54 PM



Advertisments