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








"Ben Hinkle" <bhinkle mathworks.com>