Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
October 01, 2002 obj == null causes out of memory exception or stiffs the prog. | ||||
---|---|---|---|---|
| ||||
if the following is build with Win32 DMD 0.43 import stream; class OutputBuffer { public: this() { } } int main( char[][] args ) { try { OutputBuffer buf; printf("start:\n"); if ( buf == null ) { buf = new OutputBuffer(); } printf("done:\n"); } catch (Exception e ) { printf("Exception caught:\n"); e.print(); } return 0; } and then run, it just outputs the first line. 'start: ' then stiffs. if you add a member function or two, (I had a couple and a char[][] lines,member) then you get the message 'Error: Out of memory' if you comment out the if ( buf == null ) line then it runs ( the =new .... works ) Mike. |
October 01, 2002 Re: obj == null causes out of memory exception or stiffs the prog. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Wynn | Mike Wynn wrote:
> if the following is build with Win32 DMD 0.43
>
> import stream;
>
> class OutputBuffer
> {
> public:
> this() { }
> }
>
> int main( char[][] args )
> {
> try {
> OutputBuffer buf;
>
> printf("start:\n");
> if ( buf == null ) { buf = new OutputBuffer(); }
The "==" operator is transformed into "buf.eq (null)"; calling methods on null usually stalls. The "===" operator is the one for comparing stack cells, or you may be able to do "!buf" (you definitely can on DLI, but DMD's a little clumsy when it comes to logic).
|
October 01, 2002 Re: obj == null causes out of memory exception or stiffs the prog. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Burton Radons | Burton Radons wrote: > The "==" operator is transformed into "buf.eq (null)"; calling methods > on null usually stalls. Given that (as I understand it) buf is supposed to be null here, should we get a segfault? Is the stall designed behavior or a bug to be fixed? -- The Villagers are Online! http://villagersonline.com .[ (the fox.(quick,brown)) jumped.over(the dog.lazy) ] .[ (a version.of(English).(precise.more)) is(possible) ] ?[ you want.to(help(develop(it))) ] |
October 01, 2002 Re: obj == null causes out of memory exception or stiffs the prog. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Burton Radons | arr, guess I should read the docs ... I do find the === and !== operators a bit odd with arrays == (2'='s) and (=== 3'='s) behave the same when checking against null (although new char[0] == null might be ok but new char[0] === null still bugs me) what type is null ? in Java arrays are objects and there are no pointers so null is an object what does if ( null == null ) { } do ? null.eq(null) or null === null ? (FYI null==null and null===null are both true) but in D null can be pointer, array or object in D pointers and arrays are similar so I feel that null should be a pointer/array type and borrow the pascal/delphi/oberon 'nil' be used for the object 'null' ( obj == null ) would then cause a incompatable type compile time error and (obj == nil ) would call obj.eq( nil ); and should cause the compiler to issue a warning (object value compared to nil at line ...) This might help fools such as I, who write D code with a head full of C, C++, Java, Php and Perl syntax and make me thing about what I'm doing! "Burton Radons" <loth@users.sourceforge.net> wrote in message news:3D99C541.2020701@users.sourceforge.net... > Mike Wynn wrote: > > if ( buf == null ) { buf = new OutputBuffer(); } > > The "==" operator is transformed into "buf.eq (null)"; calling methods on null usually stalls. The "===" operator is the one for comparing stack cells, or you may be able to do "!buf" (you definitely can on DLI, but DMD's a little clumsy when it comes to logic). > |
October 01, 2002 Re: obj == null causes out of memory exception or stiffs the prog. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Wynn | Mike Wynn wrote: > arr, guess I should read the docs ... > I do find the === and !== operators a bit odd > with arrays == (2'='s) and (=== 3'='s) behave the same when checking against > null > (although new char[0] == null might be ok but new char[0] === null still > bugs me) I don't like it either; it's hard to remember to use it when it's practically indistinguishable from ==. "is" would be handier. > what type is null ? in Java arrays are objects and there are no pointers so > null is an object null takes its type from the expression context. > what does if ( null == null ) { } do ? null.eq(null) or null === null ? > (FYI null==null and null===null are both true) null assumes the type of (void *) when there's no context. So it's just a pointer comparison. > but in D null can be pointer, array or object > in D pointers and arrays are similar so I feel that null should be a > pointer/array type > and borrow the pascal/delphi/oberon 'nil' be used for the object 'null' > ( obj == null ) would then cause a incompatable type compile time error > and (obj == nil ) would call obj.eq( nil ); and should cause the compiler to > issue a warning > (object value compared to nil at line ...) Why? It should definitely throw up if you try to call a method on a null object when debugging is on, but that's an easy thing to have, and it could be seen as invalid to compare objects against null. Adding another keyword looks pointless. > This might help fools such as I, who write D code with a head full of C, > C++, Java, Php and Perl syntax and make me thing about what I'm doing! |
October 02, 2002 Re: obj == null causes out of memory exception or stiffs the prog. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Burton Radons | "Burton Radons" <loth@users.sourceforge.net> wrote in message news:3D99C541.2020701@users.sourceforge.net... > Mike Wynn wrote: > > if the following is build with Win32 DMD 0.43 > > > > import stream; > > > > class OutputBuffer > > { > > public: > > this() { } > > } > > > > int main( char[][] args ) > > { > > try { > > OutputBuffer buf; > > > > printf("start:\n"); > > if ( buf == null ) { buf = new OutputBuffer(); } > > The "==" operator is transformed into "buf.eq (null)"; calling methods on null usually stalls. The "===" operator is the one for comparing stack cells... Maybe the compiler could produce a warning (please) if explicit null is compared to an object with the original non-overloaded eq member from the Object class. |
October 13, 2002 Re: obj == null causes out of memory exception or stiffs the prog. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sandor Hojtsy | "Sandor Hojtsy" <hojtsy@index.hu> wrote in message news:anea1p$c78$1@digitaldaemon.com... > > The "==" operator is transformed into "buf.eq (null)"; calling methods on null usually stalls. The "===" operator is the one for comparing stack cells... > Maybe the compiler could produce a warning (please) if explicit null is compared to an object with the original non-overloaded eq member from the Object class. You're right, I should investigate doing something about this. -Walter |
Copyright © 1999-2021 by the D Language Foundation