Compiler bug or incorrect usage for pointer of Struct?
    Heromyth 
    bitworld at qq.com
       
    Sat Jan 13 12:22:17 UTC 2018
    
    
  
When executing the test code, it will exit abnormally. It seems 
*this.output* is pointing a free memory when executing 
*writer.write(dom)*.
I'm not sure whether there is a bug in the compiler. If it is, I 
can file a bug. If not, somebody can tell me how to fix this.
Thanks!
Here is my test code (You can test it in 
https://run.dlang.io/is/0OPBVI):
==============================
import std.stdio;
void main()
{
     bugTest();
}
// This code is stripped from 
https://github.com/Kozzi11/experimental.xml/blob/master/source/std/experimental/xml/writer.d
void bugTest()
{
     string dom = "XML DOM";
     auto file = File("catalogue.xml", "w");
     // It's OK
     // auto textWriter = file.lockingTextWriter;
     // textWriter.writerFor.write(dom);
     // There's a bug
     auto writer = writerFor(file.lockingTextWriter);
     writer.write(dom);
     file.close();
}
auto writerFor(OutRange)(auto ref OutRange outRange)
{
     auto res = Writer!(OutRange)();
     res.setSink(outRange);
     return res;
}
struct Writer(OutRange)
{
     private OutRange* output;
     void setSink(ref OutRange output)
     {
         this.output = &output;
         writeln("in setSink: ", this.output);
     }
     // void setSink(typeof(output) output)
     // {
     // 	this.output = output;
     // }
     void write(string s)
     {
         writeln("in write: ", output);
         output.put(s);
     }
}
    
    
More information about the Digitalmars-d
mailing list