Re: VC++2008 and vector exception - not caught by Frank
Frank
Sat Jul 19 19:09:01 CDT 2008
Thank you for the help Alf.
I found that:
v.at(44) = 22;
throws an exception as you suggested, and
v[44] = 22;
does not (although in debug builds the error is reported).
Thanks again,
Frank
Alf P. Steinbach wrote:
> * Frank S:
>> With some test code similar to that below, I can't seem to catch
>> the exception that is thrown on the v1[44]... line.
>
> You're not guaranteed that there will be an exception, just Undefined
> Behavior (which might do anything or nothing).
>
>
>
>> What should I check to solve this problem? (I am using a mixture of
>> MFC and STL.)
>
> As I recall there is, as you imply, a Visual C++ option to get automatic
> checking also for operator[] -- if so then it's presumably documented.
>
> However, why don't you instead make that explicit in the code, and write
>
> v.at(44) = 22;
>
> Then, for a standard-conforming compiler, you get a std::something
> exception derived from std::exception.
>
>
>> vector<int> v1;
>> try
>> {
>> v1[44] = 22;
>> }
>> catch(std::exception e)
>
> For efficiency, safety, and not the least not making other programmers
> waste time on figuring out "why did he do /that/", consider catching in
> the idiomatic way, by reference to const:
>
> catch( std::exception const& e )
>
>
>
>> {
>> e.what();
>> e.what();
>> }
>
> Cheers, & hth.,
>
> - Alf
>
--
Frank