C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

C++ nothrow new() problem under Irix

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
Roger Davis
Guest





PostPosted: Sat Feb 19, 2005 3:47 am    Post subject: C++ nothrow new() problem under Irix Reply with quote



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 Wink )

#include <new>
#include <stdexcept>

std::nothrow_t NoThrow;

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

Junk::Junk() {
(void) fprintf(stderr, "constrn"); (void) fflush(stderr);
}

Junk::~Junk() {
(void) fprintf(stderr, "destrn"); (void) fflush(stderr);
}

main() {
Junk *jnk;

if ((jnk= new(NoThrow) Junk[5]) == (Junk *) 0) {
(void) fprintf(stderr, "memory allocation errorn");
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
[email]rbd (AT) NoSpamHere (DOT) hawaii.edu[/email]
Back to top
David Anderson
Guest





PostPosted: Sun Feb 20, 2005 11:47 pm    Post subject: Re: C++ nothrow new() problem under Irix Reply with quote



In article <cv6cse$4gp$1 (AT) news (DOT) hawaii.edu>,
Roger Davis <rbd (AT) planet10 (DOT) soest.hawaii.edu> wrote:
Quote:
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).

Back to top
Joseph Michaud
Guest





PostPosted: Wed Feb 23, 2005 6:17 pm    Post subject: Re: C++ nothrow new() problem under Irix Reply with quote



In article <cv6cse$4gp$1 (AT) news (DOT) hawaii.edu>,
Roger Davis <rbd (AT) planet10 (DOT) soest.hawaii.edu> wrote:
Quote:
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 Wink )

#include #include
std::nothrow_t NoThrow;

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

Junk::Junk() {
(void) fprintf(stderr, "constrn"); (void) fflush(stderr);
}

Junk::~Junk() {
(void) fprintf(stderr, "destrn"); (void) fflush(stderr);
}

main() {
Junk *jnk;

if ((jnk= new(NoThrow) Junk[5]) == (Junk *) 0) {
(void) fprintf(stderr, "memory allocation errorn");
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 [email]jmichaud (AT) sgi (DOT) com[/email]

Back to top
Roger Davis
Guest





PostPosted: Fri Feb 25, 2005 12:20 am    Post subject: Re: C++ nothrow new() problem under Irix Reply with quote

Quote:
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)

Quote:
And the IRIX OS version (just because).

eoe IRIX Execution Environment, 6.5.16m

(Thanks for looking into this, Joe.)

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.