| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
January 08, 2012 Strange Runtime Error - Static Arrays | ||||
|---|---|---|---|---|
| ||||
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? | ||||
January 08, 2012 Re: Strange Runtime Error - Static Arrays | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Zachary Lund | 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 ];
| |||
January 09, 2012 Re: Strange Runtime Error - Static Arrays | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Zachary Lund | 2012/1/9 Zachary Lund <admin@computerquip.com>:
> 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 ];
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.
| |||
January 09, 2012 Re: Strange Runtime Error - Static Arrays | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Zachary Lund | > Couldn't this be prevented at compile time? https://github.com/D-Programming-Language/dmd/pull/375 | |||
January 09, 2012 Re: Strange Runtime Error - Static Arrays | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Zachary Lund | 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
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply