Thread overview | |||||
---|---|---|---|---|---|
|
September 15, 2005 Constructor bug or me? | ||||
---|---|---|---|---|
| ||||
Don't know if this is a compiler bug or me doing something undefined. Had a string class with a size member and a minimum allocation member. Default constructor originally like this: string() : min(64),sz(min),ln(0) { p=new char[sz+1]; *p=0; } It worked fine until a certain amount (quite a lot) of memory had been consumed by the program then started crashing as 'p' was null after the new statement. Changed to: string() : min(64),sz(64),ln(0) { p=new char[sz+1]; *p=0; } and worked fine. Can you not use previous member constructor values in the constructor list then? Just curious really. Paul |
September 15, 2005 Re: Constructor bug or me? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul | You can use them, just make sure that they're listed in the order you want them initialized: class string { string() : min(64) , sz(min) , ln(0) { //... } private: int min; // These must appear in this order int sz; // if sz comes first, min has an undefined value int ln; // when used in sz's initialization }; HTH Pablo "Paul" <Paul_member@pathlink.com> wrote in message news:dgbund$176c$1@digitaldaemon.com... > Don't know if this is a compiler bug or me doing something undefined. Had > a > string class with a size member and a minimum allocation member. Default > constructor originally like this: > > string() : min(64),sz(min),ln(0) { p=new char[sz+1]; *p=0; } > > It worked fine until a certain amount (quite a lot) of memory had been > consumed > by the program then started crashing as 'p' was null after the new > statement. > > Changed to: > > string() : min(64),sz(64),ln(0) { p=new char[sz+1]; *p=0; } > > and worked fine. Can you not use previous member constructor values in the constructor list then? Just curious really. > > Paul > > |
September 20, 2005 Re: Constructor bug or me? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Pablo Aguilar | Yep. That explains it. Thanks. Paul In article <dgcbp8$1mll$1@digitaldaemon.com>, Pablo Aguilar says... > >You can use them, just make sure that they're listed in the order you want >them initialized: >class string >{ > string() > : min(64) > , sz(min) > , ln(0) > { > //... > } >private: > int min; // These must appear in this order > int sz; // if sz comes first, min has an undefined value > int ln; // when used in sz's initialization >}; > > >HTH > >Pablo > >"Paul" <Paul_member@pathlink.com> wrote in message news:dgbund$176c$1@digitaldaemon.com... >> Don't know if this is a compiler bug or me doing something undefined. Had >> a >> string class with a size member and a minimum allocation member. Default >> constructor originally like this: >> >> string() : min(64),sz(min),ln(0) { p=new char[sz+1]; *p=0; } >> >> It worked fine until a certain amount (quite a lot) of memory had been >> consumed >> by the program then started crashing as 'p' was null after the new >> statement. >> >> Changed to: >> >> string() : min(64),sz(64),ln(0) { p=new char[sz+1]; *p=0; } >> >> and worked fine. Can you not use previous member constructor values in the constructor list then? Just curious really. >> >> Paul >> >> > > |
Copyright © 1999-2021 by the D Language Foundation