digitalmars.D - Strange Runtime Error - Static Arrays
- Zachary Lund (17/17) Jan 08 2012 Someone brought an example that I thought was rather strange an
- Zachary Lund (3/20) Jan 08 2012 Er, wrong line given...
- Mail Mantis (7/32) Jan 08 2012 Try this example:
- Trass3r (1/2) Jan 08 2012 https://github.com/D-Programming-Language/dmd/pull/375
- bearophile (5/6) Jan 08 2012 It should not give this error at run time. Such run-time error should be...
Someone brought an example that I thought was rather strange an preventable in the IRC this evening. Take this example: int[3] bob = [ 1, 2, 3]; The above will compile fine and the program may even run fine up until the above statement. When the above statement is executed, an exceptional error is given: object.Exception src/rt/arraycat.d(31): lengths don't match for array copy ---------------- ./main() [0x8049ec3] ./main() [0x804cbd0] ./main() [0x804c875] ./main() [0x804cc17] ./main() [0x804c875] ./main() [0x804c824] /lib/libc.so.6(__libc_start_main+0xf3) [0xb764d483] ---------------- Couldn't this be prevented at compile time?
Jan 08 2012
On 01/08/2012 05:33 PM, Zachary Lund wrote:Someone brought an example that I thought was rather strange an preventable in the IRC this evening. Take this example: int[3] bob = [ 1, 2, 3]; The above will compile fine and the program may even run fine up until the above statement. When the above statement is executed, an exceptional error is given: object.Exception src/rt/arraycat.d(31): lengths don't match for array copy ---------------- ./main() [0x8049ec3] ./main() [0x804cbd0] ./main() [0x804c875] ./main() [0x804cc17] ./main() [0x804c875] ./main() [0x804c824] /lib/libc.so.6(__libc_start_main+0xf3) [0xb764d483] ---------------- Couldn't this be prevented at compile time?Er, wrong line given... int[4] bob = [ 1, 2, 3 ];
Jan 08 2012
2012/1/9 Zachary Lund <admin computerquip.com>:On 01/08/2012 05:33 PM, Zachary Lund wrote:Try this example: int[4] bob; writeln( typeof(bob).stringof ); // int[4u] writeln( typeof([1, 2, 3]).stringof ); // int[] It seems that array literal evaluates to dynamic array. Why it works so, I don't know, but seemingly it is the cause of that odd behaviour.Someone brought an example that I thought was rather strange an preventable in the IRC this evening. Take this example: int[3] bob = [ 1, 2, 3]; The above will compile fine and the program may even run fine up until the above statement. When the above statement is executed, an exceptional error is given: object.Exception src/rt/arraycat.d(31): lengths don't match for array copy ---------------- ./main() [0x8049ec3] ./main() [0x804cbd0] ./main() [0x804c875] ./main() [0x804cc17] ./main() [0x804c875] ./main() [0x804c824] /lib/libc.so.6(__libc_start_main+0xf3) [0xb764d483] ---------------- Couldn't this be prevented at compile time?Er, wrong line given... int[4] bob = [ 1, 2, 3 ];
Jan 08 2012
Couldn't this be prevented at compile time?https://github.com/D-Programming-Language/dmd/pull/375
Jan 08 2012
Zachary Lund:Couldn't this be prevented at compile time?It should not give this error at run time. Such run-time error should be avoided with all the energy possible. Isn't this somewhere in Bugzilla already? Bye, bearophile
Jan 08 2012