Catching array out of bounds
Lars T. Kyllingstad
public at kyllingen.NOSPAMnet
Thu Nov 5 07:06:09 PST 2009
Lars T. Kyllingstad wrote:
> jicman wrote:
>> Justin Johansson Wrote:
>>
>>> jicman Wrote:
>>>
>>>> Greetings!
>>>>
>>>> I have this program,
>>>>
>>>> import std.stdio;
>>>> void main()
>>>> {
>>>> char[][] a = ["a","b","c"];
>>>> try
>>>> {
>>>> writefln(a[3]);
>>>> }
>>>> catch (ArrayBoundsError)
>>>> {
>>>> writefln("error...");
>>>> }
>>>> }
>>>>
>>>> when I compile it, I get,
>>>>
>>>> 23:53:52.73>build -I..;c:\D\dmd\import array.d
>>>> array.d(10): Error: identifier 'ArrayBoundsError' is not defined
>>>> array.d(10): Error: ArrayBoundsError is used as a type
>>>> Error: can only catch class objects, not 'void'
>>>>
>>>> This is right from the D1 Arrays help...
>>>>
>>>> http://www.digitalmars.com/d/1.0/arrays.html
>>>>
>>>> What am I doing wrong?
>>>>
>>>> thanks,
>>>>
>>>> josé
>>>>
>>> Hi josé,
>> Hi Justin.
>>
>>> You don't import modules as you show:
>>> build -I..;c:\D\dmd\import array.d
>> I am giving the path of where the modules are. The array.d is the
>> program that contains the above code.
>>
>>> You should be importing the array module into
>>> your program using the following statement.
>>>
>>> import std.array;
>> there is no module std.array for D1. I don't know about D2, but D1
>> does not have it.
>>
>>> Also (and I' not 100% sure about this) that you might need to
>>> declare a variable along with the catch statement like as follows
>>> (at least that's what I always do regardless of whether or
>>> not it may be omitted) ...
>>>
>>> catch (ArrayBoundsError e) {
>>> ...
>>> }
>> I tried that also. :-) Did you even try the little program? Copy and
>> paste to your favorite editor and give it a try. :-)
>>
>> Anybody else can provide me what is wrong with the program above?
>>
>> thanks,
>>
>> josé
>
>
> Actually, there is a module called std.array in D1 as well. For some
> reason it's just not in the documentation on the homepage. The
> ArrayBoundsError class is defined in there. Try importing it, and see if
> that works. (I can't test it, as I'm using D2 myself.)
>
> Alternatively, write catch(Exception e) or catch(Error e). Both of them
> are defined in object.d and are always available.
...or don't. Like grauzone pointed out, you shouldn't rely on array
bounds being checked. That's probably why std.array isn't in the docs.
-Lars
More information about the Digitalmars-d-learn
mailing list