Can't understand if deallocation happens?
    Suliman via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Sun Jan 22 04:49:11 PST 2017
    
    
  
import std.stdio;
import std.string;
import core.memory;
void main()
{
     char [] str = "aaa".dup;
     char [] *str_ptr = &str;
     writeln("before: ", str_ptr.ptr);// address of structure
     writeln(*str_ptr.ptr); // address of data
     str[] = "bbb"[]; // now writing to structure new data, so ptr 
would be point to them
     writeln("after: ", str_ptr.ptr);
     writeln("length: ", str_ptr.length);
     writeln("str_ptr point to: ", *str_ptr.ptr);
     writeln(str_ptr);
	
     writeln("before dealloc: ", str_ptr.length);
     GC.free(str_ptr.ptr);
     writeln(str_ptr);
     writeln("after dealloc: ", str_ptr.length);
}
As I understand str structure would have 2 data peace after 
writing "bbb" to it. But ptr will point to last one (to "bbb").
[aaa] [bbb]
--------+
So after appending "bbb" I should see that the size is 3, after 
appending 6. After GC again 3. But I see only 3 before and after 
GC:
> app.exe
before: 2641010
a
after: 2641010
length: 3
str_ptr point to: b
19FE0C
before dealloc: 3
19FE0C
after dealloc: 3
And am I right understand that here memory should be GC-ed?
Another question:
writeln("before: ", str_ptr.ptr);// address of structure
Is it's address from 0 of current App memory?
    
    
More information about the Digitalmars-d-learn
mailing list