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];