Confusing behavior involving array operations.

Pillsy pillsbury at gmail.com
Fri May 14 16:14:07 PDT 2010


I have the following program on Mac OS X 10.6.3 running dmd version 2.043:

$ cat if.d
import std.stdio;

void main (string [] args)
{
  foreach(arg; args)
    writeln(arg);

  auto vec = new double[10];

  foreach(i, ref x; vec) { x = cast(double) i; }

  if (args.length > 1 && args[1] == "bar") { vec[] *= 0.5; }
}

This program compiles with no warnings. However, when I run it, I get a bus error regardless of the
value of the first command-line argument, or whether it's present at all. I also get bus error if I
eliminate the conditional altogether. AFAICT, the array operation I'm doing on vec is legitimate
according to

http://www.digitalmars.com/d/2.0/arrays.html

and the fact that the program bombs out regardless of the outcome of the test in the conditional is
particularly mystifying.

Any help would be greatly appreciated.

Thanks,
Pillsy


More information about the Digitalmars-d-learn mailing list