May 20, 2005 local_array ~ null_array leading to AV | ||||
---|---|---|---|---|
| ||||
int main() { Object[] array = null; void dofirst() { Object o1 = new Exception("first"); //array = (&o1)[0 .. 1] ~ array; // Causes Access Violation when using toString() on the array... array = (&o1)[0 .. 1].dup ~ array; // Works. } dofirst(); Object o2 = new Exception("second"); array ~= o2; printf("array[0] = %.*s; array[1] = %.*s;", array[0].toString(), array[1].toString()); // ...here return 0; } Shouldn't ~ create a safe new heap array even if its operands are local? I had to put that first one in the nested function so it could screw with the stack I guess. This is a dumbed down example of something much larger in my code that heavily (in many areas) relies on ~ copying. |
May 20, 2005 Re: local_array ~ null_array leading to AV | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vathix |
"Vathix" <vathix@dprogramming.com> wrote in message news:op.sq22b3takcck4r@esi...
> int main()
> {
> Object[] array = null;
>
> void dofirst()
> {
> Object o1 = new Exception("first");
> //array = (&o1)[0 .. 1] ~ array; // Causes Access Violation when
> using toString() on the array...
> array = (&o1)[0 .. 1].dup ~ array; // Works.
> }
>
> dofirst();
> Object o2 = new Exception("second");
> array ~= o2;
>
> printf("array[0] = %.*s; array[1] = %.*s;", array[0].toString(),
> array[1].toString()); // ...here
>
> return 0;
> }
>
>
> Shouldn't ~ create a safe new heap array even if its operands are local? I had to put that first one in the nested function so it could screw with the stack I guess. This is a dumbed down example of something much larger in my code that heavily (in many areas) relies on ~ copying.
It is true the documentation says ~ always dups even if one of the inputs is empty. It looks like in practice it does not dup if one of the inputs is empty. Either the doc is out of date or ~ needs a fix.
|
Copyright © 1999-2021 by the D Language Foundation