Extremely funny behavior .. could be a bug?
    seany via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Fri Sep 12 06:35:35 PDT 2014
    
    
  
consider the following :
in file a.d
module a;
class class_a
{
    struct RESULT{
    string[] raw;
    void* res;
   }
RESULT r;
void dothing()
{
    r = new RESULT;
    string aa = "string";
    r.raw ~= aa;
    r.res = cast(void*) aa;
}
}
in file b.d
import a;    // import path is okey
class class_b;
{
    void doThings(class_a * ptr_a)
   {
      class_a A = &ptr_a;
      writeln(A.r.raw[0]); // prints aa;
      writeln(A.r.res);    // fails : 
core.exception.OutOfMemoryError@(0)
                               // but if i do comment the line :
                               // writeln(A.r.raw[0]); out, then 
works
   }
}
in file c.d
import a;
import b;
void main() {
clsa = new class_a;
clsb = new class_b;
clsa.dothing();
clsa.doThings( & clsa);
}
I can not find a reason why accessing A.r.raw will erase (invoke 
the garbage collector) to remove A.r.res. Please help.
    
    
More information about the Digitalmars-d-learn
mailing list