Strange seg fault

gedaiu szabobogdan at yahoo.com
Wed Jun 12 23:56:36 PDT 2013


Hi,

How should i submit this bug?

Thanks,
Bogdan

On Wednesday, 12 June 2013 at 20:49:54 UTC, Ali Çehreli wrote:
> On 06/12/2013 01:12 PM, gedaiu wrote:
>
> > Hi,
> >
> > Can anyone help me why this code goes wrong? I get exit code
> 139 with
> > DMD 2.063
> >
> >
> > import std.stdio;
> >
> >
> >
> > struct Test {
> >      string val = "";
> >      string[] key;
> >
> >      /**
> >       * operator "=" overload
> >       */
> >      Test opAssign(string val){
> >          this.val = val;
> >
> >          string[1] t;
> >          t = val;
> >
> >          key ~= t;
>
> Instead of the last three lines:
>
>     key ~= val;
>
> However, if you really wanted a 1-element fixed-length array 
> then:
>
>     string[1] t = [ val ];
>
> >          return this;
> >      }
> >
>
> Remove the following opAssign altogether:
>
> >      Test opAssign(Test val){
> >          this.val = val.val;
> >
> >          key ~= val.key;
> >
> >          return this;
> >      }
>
> As general rules:
>
> * Define a post-blit only if the code would be incorrect if you 
> don't do that. (For example, it may be incorrect that two 
> objects share the same array.)
>
> * Define an opAssign from the same type only if your 
> implementation will be more efficient than the compiler's safe 
> alternative, which happens to be "first copy, then swap." For 
> example, instead of copying a member array, you may decide to 
> reuse it.
>
> >      void append(Test t) {
> >          val ~= t.val;
> >          key ~= t.key;
> >      };
> > }
> >
> > void main() {
> >
> >      Test val;
> >      val = "test";
> >
> >      Test[string] data;
> >      Test v;
> >      v = "asd";
> >      data["test"] = v;
> >
> >      writeln(v);
> >      writeln(data["test"]);
> >
> >      data["test"].append(val);
> >
> >
> >      writeln(data["test"].key);
> >      writeln("done");
> > }
> >
> > Thanks,
> > Bogdan
>
> Ali



More information about the Digitalmars-d-learn mailing list