<div dir="auto"><div><div class="gmail_quote"><div dir="ltr">On Tue., 29 Jan. 2019, 10:25 pm Walter Bright via Digitalmars-d-announce <<a href="mailto:digitalmars-d-announce@puremagic.com">digitalmars-d-announce@puremagic.com</a> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 1/29/2019 3:45 AM, Andrei Alexandrescu wrote:<br>
> I am talking about this:<br>
> <br>
> int[] a = cast(int[]) alloc.allocate(100 * int.sizeof);<br>
> if (alloc.reallocate(a, 200 * int.sizeof)<br>
> {<br>
>      assert(a.length == 200);<br>
> }<br>
<br>
Even simpler:<br>
<br>
   void func(ref void* p) {<br>
     free(p);                     // frees (1)<br>
     p = malloc(100);              // (2)<br>
   }<br>
<br>
   int* p = cast(int*)malloc(16);  // (1)<br>
   func(p);                        // p copied to temp for conversion to void*<br>
   free(p);                        // frees (1) again<br>
                                   // (2) is left dangling<br>
<br>
It's a memory corruption issue, with no way to detect it.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Why are you so stuck on this case? The DIP is about accepting rvalues, not lvalues...</div><div dir="auto">Calling with 'p', an lvalue, is not subject to this DIP.</div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>