[Issue 6153] Inserting to An Array!T inside an Array!(Array!T) causes a segfault.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Apr 24 07:55:57 PDT 2012
http://d.puremagic.com/issues/show_bug.cgi?id=6153
SomeDude <lovelydear at mailmetrash.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |lovelydear at mailmetrash.com
--- Comment #1 from SomeDude <lovelydear at mailmetrash.com> 2012-04-24 07:56:49 PDT ---
The following works correctly:
import std.stdio;
import std.container;
int main() {
alias Array!int Arr1D;
alias Array!Arr1D Arr2D;
auto arr1D = Arr1D();
auto arr2D = Arr2D();
writefln("arr1D %s of size = %d", arr1D, arr1D.length());
arr1D.insert(1);
arr1D.insert(2);
writefln("arr1D %s of size = %d", arr1D[0], arr1D.length());
arr2D.insert(arr1D);
writefln("arr2D %s of size = %d", arr2D, arr2D.length());
writeln(arr2D[0][0], arr2D[0][1]);
return 0;
}
It produces the output:
PS E:\DigitalMars\dmd2\samples> rdmd a.d
arr1D
Array!(int)(RefCounted!(Payload,cast(RefCountedAutoInitialize)0)(_RefCounted(null)))
of size = 0
arr1D 1 of size = 2
arr2D
Array!(Array!(int))(RefCounted!(Payload,cast(RefCountedAutoInitialize)0)(_RefCounted(A623F0)))
of size = 1
12
PS E:\DigitalMars\dmd2\samples>
However inserting ints in arr1D *after* having inserted it in arr2D produces
access violations:
import std.stdio;
import std.container;
int main() {
alias Array!int Arr1D;
alias Array!Arr1D Arr2D;
auto arr1D = Arr1D();
auto arr2D = Arr2D();
arr2D.insert(arr1D);
writefln("arr2D %s of size %d", arr2D[0], arr2D.length());
arr2D[0].insert(1);
arr2D[0].insert(2);
writefln("array size after insert: %d", arr2D[0].length());
//writeln(arr2D[0][0], arr2D[0][1]);
return 0;
}
produces:
PS E:\DigitalMars\dmd2\samples> rdmd bug.d
arr2D
Array!(int)(RefCounted!(Payload,cast(RefCountedAutoInitialize)0)(_RefCounted(null)))
of size 1
array size after insert: 0
PS E:\DigitalMars\dmd2\samples>
It seems that the reason is, as long as arr1D has no elements inserted via
insert, it's not allocated and arr2D[0] is null.
See also issue 7901.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list