digitalmars.D.bugs - local_array ~ null_array leading to AV
- Vathix (21/21) May 20 2005 int main()
- Ben Hinkle (5/26) May 20 2005 It is true the documentation says ~ always dups even if one of the input...
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
"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.
May 20 2005