Форум программистов, компьютерный форум CyberForum.ru

обработка исключений - C++

Восстановить пароль Регистрация
 
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
18.03.2013, 23:01     обработка исключений #1
Здравствуйте. В следующем коде, при запуске throw выдает ошибку "Exception object adress". Не понимаю почему. Подскажите пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
using namespace std;
///////////////////////////////////////////
const int SIZE = 2;
//////////////////////////////////////////
template< class Sparrow >
class Queue
{
 private:
  int top,bot,ctr;
  Sparrow arr[SIZE];
 public:
 class full{};
 class empty{};
 Queue () : top(-1), bot(-1), ctr(0)
 { }
 void additem ( Sparrow Val );
  Sparrow dropval ( );
};
///////////////////////////////////////////
template<class Sparrow>
void Queue<Sparrow> :: additem ( Sparrow Val )
{
 ctr++;
 if( ctr > SIZE-1 )
 { ctr--; throw full(); }
 else
 arr[++bot] = Val;
}
//////////////////////////////////////////
template<class Sparrow>
Sparrow Queue<Sparrow> :: dropval( )
{
 ctr--;
 if( ctr < 0 )
 {ctr++; throw empty();}
 else
 {
  if ( top == bot )
  { int z = top; top = 0; bot = 0; return arr[z]; }
  else
  return arr[++top];
 }
}
////////////////////////////////////////////
int main ( int argc, char* argv[] )
{
 
 Queue<float> o1;
 char ans;
 float v1;
 
 while( ans != 'n' )
 {
 
  cout << " Press A to add a value" << endl;
  cout << " Press D to drop a value" << endl;
  cin >> ans;
 
   try
{
  switch( ans )
  {
   case 'a':
   cout << " Enter value: "<< endl;
   cin >> v1;
   o1.additem(v1);
   cout << " Value " << v1 << " added to the queue " << endl;
   break;
   case 'd':
   cout << " Value " << o1.dropval() << " extracted from the queue " << endl;
   break;
  }
}
  catch(Queue<float>::full)
  {
   cout << " Error! Queue is overfilled!";
  }
 
  catch( Queue<float>::empty )
  {
   cout << " Error! Queue is empty! ";
  }
 
  cout << " Continue?(Y/N): " << endl;
  cin >> ans;
 }
 system("PAUSE");
 return 0;
}
Добавлено через 9 минут
может я try не там вставил или объект как то не так определил...

Добавлено через 1 час 48 минут
Собственно с этим кодом та же ситуация. При запуске throw - та же ошибка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <process.h>
using namespace std;
const int SZ = 100;
template<class R>
class safearray
{
 private:
  R arr[SZ];
 public:
  class full{};
  class empty{};
  R& operator[]( int n )
  {
   if ( n < 0 )
   throw empty();
   else if ( n >= SZ )
    throw full();
    return arr[n];
  }
};
////////////////////////////////////////
int main ( int argc, char* argv[] )
{
 
 
try
{
 safearray<float> o1;
 for ( int j = 0; j < SZ+2; j++ )
{
 o1[j] = j * 10.0;
}
float temp;
for ( int j = 0; j < SZ; j++ )
{
 temp = o1[j];
cout << " Element "<< j << " equal " << temp << endl;
}
}
catch(safearray<float>::full)
{
 cout << " Incorrect index!( Too Big ) " << endl; exit(1);
}
catch(safearray<float>::empty)
{
 cout << " Incorrect index!(Negative) " << endl; exit(1);
}
system("PAUSE");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 23:01     обработка исключений
Посмотрите здесь:

Обработка исключений C++
C++ Обработка исключений
Обработка исключений C++
Обработка исключений с пмощью структурированной обработки исключений C++
Обработка исключений C++
Обработка исключений C++
C++ Обработка исключений
C++ Обработка исключений

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
19.03.2013, 01:11     обработка исключений #2
C++
1
2
3
4
    char ans;
    float v1;
 
    while( ans != 'n' )
переменная ans используется без инициализации

сделайте хоть так
C++
1
char ans = '0';
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
19.03.2013, 12:54  [ТС]     обработка исключений #3
это конечно да. Но увы к самой проблеме отношение переменная ans не имеет и иметь не может. Почему то дебагер выдает ошибку в любой программе, если использовать исключения. Builder 6. Не могу понять почему

Добавлено через 7 минут
В общем я сам нашел ответ на свой вопрос. Напишу здесь, чтобы люди с той же проблемой могли быстро откопать это. Если вы используете Builder то следует его настроить следующим образом:

Tools->Debugger Options->Language Exception
снять галочки с "Stop on Delphi Exceptions" и "Stop on C++ Exceptions" и всё заработает на ура
Yandex
Объявления
19.03.2013, 12:54     обработка исключений
Ответ Создать тему
Опции темы

Текущее время: 23:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru