On 09/20/2011 08:06 PM, Dax wrote:
Hi!
I'm working on a library written in D.
After some tests I have discovered that my library leaks memory, those leaks 
are caused by dynamics array that I use in my library.


Does it 'leak'? What is your exact setup, why isn't the GC collecting that memory?

My question is:
Should dynamics array be deallocated automatically when a procedure returns? 
There is another way to acomplish this?

Maybe I'm doing something wrong, so, I post the function that causes the leak:

public string getWindowText(HWND hWnd)
{
   int len = GetWindowTextLengthW(hWnd);
   wchar[] t = new wchar[len + 1]; // How to deallocate this?

   GetWindowTextW(hWnd, t.ptr, len);

   /*
    * I'm converting the wchar[] to char[],
    * the variable 't' should be deallocated
    * because I not need it anymore.
    */
   return to!(string)(t[0..len]);
}


Unless the string gets extremely long, you could allocate it on the stack:

wchar[] t=(cast(wchar*)alloca(wchar.sizeof*(len+1)))[0..len+1];



Reply via email to