Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C++ Moderated > Re: composition...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 7 of 12 Topic 9509 of 9828
Post > Topic >>

Re: composition and bad_alloc

by Gerhard Menzl <clcppm-poster@[EMAIL PROTECTED] > Apr 17, 2008 at 03:59 AM

mpho wrote:

> This seems straightforward but gives this runtime error: terminate
> called after throwing an instance of 'std::bad_alloc' , what() :
> std9bad_alloc . I have:
>
> class X {
>      int sz;
>      T *ptr;

Unknown type T.

>
>   public:
>             X(int s, T *p) : sz(s), ptr(new T[s])
>             {
>               assert(ptr != NULL);

What's the purpose of the assert here? Do you want to make sure the
standard allocator is working correctly? Unless you have overloaded
new[] and implemented it incorrectly, ptr cannot ever be null here.

>                for (int i = 0, i < sz; i++)

Syntax error.

>                   ptr[i] = p[i];
>             }
>
>             //other members
>
>             ~X() {  delete ptr;  ptr = NULL;  }

Undefined behaviour. What has been allocated via new[] requires
delete[]. Besides, setting ptr to null is as gratuitous as the assert
before. ptr cannot be legally accessed anymore after the destructor has
executed.

>  };
>
>  class Y {
>               X xobj

Missing semicolon.

>
>     public:
>                Y(int s, T *p) : xobj(s, p) {  } //OK?
>                 //other members
>                 ~Y() { } //OK?
>  };
>
> then
>
> int main(){
>
>  ar[10] = {ten values};

Unknown identifer ar. If this is supposed to be its definition, where is
the type?

>  Y yobj(10, ar); //problem here(?)
> ......
> .....

Syntax error.

> }
> What's the problem above?
> Thank you.

The main problem is that you submit ill-formed and incomplete code and
expect others to correct the obvious errors and guess the not so obvious
bits that are missing. Without knowing what T is, it is impossible to
say what is going on.

The only glaring runtime problem is the new[]/delete mismatch, but I
doubt that it would cause std::bad_alloc to be thrown (although with
undefined behaviour, anything is possible). The most likely cause is
inifinite recursion somewhere in the code you have not shown, which
causes the free store to be exhausted.


-- 
Gerhard Menzl

Non-spammers may respond to my email address, which is composed of my
full name, separated by a dot, followed by at, followed by "fwz",
followed by a dot, followed by "aero".


      [ See http://www.gotw.ca/resources/clcm.htm
for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]
 




 12 Posts in Topic:
composition and bad_alloc
mpho <tjabane@[EMAIL P  2008-04-16 15:43:28 
Re: composition and bad_alloc
Michael Aaron Safyan <  2008-04-17 03:48:15 
Re: composition and bad_alloc
Geert-Jan Giezeman <ge  2008-04-17 03:58:39 
Re: composition and bad_alloc
"Antoon" <th  2008-04-17 03:57:37 
Re: composition and bad_alloc
acehreli@[EMAIL PROTECTED  2008-04-17 03:52:21 
Re: composition and bad_alloc
=?ISO-8859-1?Q?Daniel_Kr=  2008-04-17 03:56:57 
Re: composition and bad_alloc
Gerhard Menzl <clcppm-  2008-04-17 03:59:03 
Re: composition and bad_alloc
Mathias Gaunard <loufo  2008-04-17 03:56:11 
Re: composition and bad_alloc
Chris Uzdavinis <cuzda  2008-04-17 04:13:13 
Re: composition and bad_alloc
mpho <tjabane@[EMAIL P  2008-04-18 06:13:19 
Re: composition and bad_alloc
acehreli@[EMAIL PROTECTED  2008-04-18 15:01:27 
Re: composition and bad_alloc
=?ISO-8859-1?Q?Daniel_Kr=  2008-04-18 15:01:06 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Thu Jul 24 15:36:57 CDT 2008.