Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #6046

Re: like to know why it is segmentation fault on simple throw-exception program

From Ian Collins <ian-news@hotmail.com>
Newsgroups comp.lang.c++
Subject Re: like to know why it is segmentation fault on simple throw-exception program
Date 2011-06-02 10:44 +1200
Message-ID <94ntlmF12lU14@mid.individual.net> (permalink)
References <fca61986-de7e-40b8-80e3-0a40633a3bf1@j13g2000pro.googlegroups.com> <94ns1jF12lU13@mid.individual.net> <is6epo$kki$1@dont-email.me>

Show all headers | View raw


On 06/ 2/11 10:34 AM, Victor Bazarov wrote:
> On 6/1/2011 6:16 PM, Ian Collins wrote:
>> On 06/ 2/11 10:01 AM, eric wrote:
>>> Dear comp.lang.c++ reader or advced c++ programers:
>>>
>>> I copied a piece of code from page 397 of book (Practical C++
>>> programming), example22-1, stack_e1.cpp
>>> about Throwing an Exception.
>>> after a little modification, it successfully compile on my gnu/g++/
>>> ubuntuLinux system
>>> but when i run it, it response
>>> Segmentation fault
>>
>> Without digging too deep, this will get you in a whole heap of trouble:
>>
>> const int STACK_SIZE = 100; // Maximum size of a stack
>>
>> ..
>>
>> int data[STACK_SIZE]; // The items themselves
>> ..
>>
>> for (i=0; i<  5000; i++) {
>> test_stack.push(i);
>>
>> How big is data? How many items do you push?
>
> The whole point of the exercise was to catch the "exceptional" situation
> in which _too much_ is pushed.  I am guessing you *did* need to dig a
> bit deeper (using your words).  See the original post again and try
> paying attention this time. :*)

OK, I dug:

inline void stack::push(const int item) throw(bound_err)
{
     if ((count < 0) &&
            (count >= sizeof(data)/sizeof(data[0]))) {
        throw("Push overflows stack");
     }
     data[count] = item;
     ++count;
}

Nothing will be thrown since count can't be negative and >= STACK_SIZE!

>> Also using exception specifiers is generally regarded as bad practice.
>
> Really?
>
>> It will land you in all sorts of problems if something you call throws
>> some other exception type.
>
> That can be too deep for the OP.  The inquiry looked very much like a
> homework (done by the OP, which is commendable), part of a C++ course,
> in which they *might* learn later that an exception specification is
> frowned upon by some c.l.c++ inhabitants.

There are some who don't frown upon them?

-- 
Ian Collins

Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

like to know why it is segmentation fault on simple throw-exception program eric <cneric12lin0@gmail.com> - 2011-06-01 15:01 -0700
  Re: like to know why it is segmentation fault on simple throw-exception program Ian Collins <ian-news@hotmail.com> - 2011-06-02 10:16 +1200
    Re: like to know why it is segmentation fault on simple throw-exception program Victor Bazarov <v.bazarov@comcast.invalid> - 2011-06-01 18:34 -0400
      Re: like to know why it is segmentation fault on simple throw-exception   program Ian Collins <ian-news@hotmail.com> - 2011-06-02 10:44 +1200
        Re: like to know why it is segmentation fault on simple throw-exception   program Victor Bazarov <v.bazarov@comcast.invalid> - 2011-06-01 18:46 -0400
          Re: like to know why it is segmentation fault on simple throw-exception program eric <cneric12lin0@gmail.com> - 2011-06-01 20:07 -0700
            Re: like to know why it is segmentation fault on simple throw-exception program Paavo Helde <myfirstname@osa.pri.ee> - 2011-06-02 00:28 -0500
              Re: like to know why it is segmentation fault on simple throw-exception program Victor Bazarov <v.bazarov@comcast.invalid> - 2011-06-02 07:59 -0400
        Re: like to know why it is segmentation fault on simple throw-exception program red floyd <redfloyd@gmail.com> - 2011-06-02 11:20 -0700
  Re: like to know why it is segmentation fault on simple throw-exception program Victor Bazarov <v.bazarov@comcast.invalid> - 2011-06-01 18:44 -0400

csiph-web