www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - will .length=0 clear memory

reply Big Bill <bigdorkyb tengu.com> writes:
i just wonder here,

free(x); will free contents of x, but will x.length=0 free memory too?
Nov 05 2008
next sibling parent "Bill Baxter" <wbaxter gmail.com> writes:
On Thu, Nov 6, 2008 at 2:02 PM, Big Bill <bigdorkyb tengu.com> wrote:
 i just wonder here,

 free(x); will free contents of x, but will x.length=0 free memory too?

No it does not, and this is how you can implement a "reserve_capacity" kind of function for D arrays. void reserve_capacity(T)(ref T[] a, size_t N) { size_t orig_length = a.length; if (orig_length >= N) return; a.length = N; a.length = orig_length; }
Nov 05 2008
prev sibling next sibling parent "Jarrett Billingsley" <jarrett.billingsley gmail.com> writes:
On Thu, Nov 6, 2008 at 12:02 AM, Big Bill <bigdorkyb tengu.com> wrote:
 i just wonder here,

 free(x); will free contents of x, but will x.length=0 free memory too?

free(x) doesn't clear the contents of x. In fact it's completely illegal and I'm surprised your compiler allows it. Not only can arrays not be implicitly cast to pointers, but free() is a C stdlib function, and using free() to free memory allocated by the D GC is a terrible idea. Did you mean "delete x;"?
Nov 05 2008
prev sibling parent "Bill Baxter" <wbaxter gmail.com> writes:
On Thu, Nov 6, 2008 at 2:46 PM, Jarrett Billingsley
<jarrett.billingsley gmail.com> wrote:
 On Thu, Nov 6, 2008 at 12:02 AM, Big Bill <bigdorkyb tengu.com> wrote:
 i just wonder here,

 free(x); will free contents of x, but will x.length=0 free memory too?

free(x) doesn't clear the contents of x. In fact it's completely illegal and I'm surprised your compiler allows it. Not only can arrays not be implicitly cast to pointers, but free() is a C stdlib function, and using free() to free memory allocated by the D GC is a terrible idea. Did you mean "delete x;"?

And if you want to let the GC handle it, then x = null; For some reason I completely missed that free(x) in the original mail. Yeh, free() on a D array is not right. --bb
Nov 05 2008