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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 414
#1

Исключение Нарушение прав доступа при чтении - C++

23.04.2014, 11:52. Просмотров 314. Ответов 3
Метки нет (Все метки)

Есть такое задание - создать 2 класса
Класс -символ, c печататью свое знач и ответом на запрос о значении своего символьного поля;
класс строка- массив из 15 симв, умеющий выводить на печать зн своих элементов
вот
реализация
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
#include <iostream>
#include <string.h>
using namespace std;
class TSymb 
{//символ,c печатать свое зн и отв на запрос о знач св символьного поля; 
public:
TSymb(char c); 
void printCH();
protected:
  char ch;
};
TSymb::TSymb(char c)
{ ch=c;}
void TSymb::printCH()
{cout<<ch;}
class TString//объект «строка»- массив из 15 симв, умеющий выводить на печать зн своих элем 
{ private:   
   char *Ref;
  TSymb *smb[3]; 
  public:
     TString(char *ref);
     ~TString(void) {  delete Ref;}
      void prn();
};
 
TString::TString(char *ref)
{  char c;
    for (int i=0;i<3;i++){
     c=ref[i];
     smb[i]=new TSymb(c);
    }
}
void TString::prn()
{ 
    for(int i=0;i<3;i++)
        smb[i]->printCH();
}
и тест-функция
C++
1
2
3
4
5
6
7
8
9
10
11
12
void main()
{ 
  char c; char s[15];
  while(1==1) {
  cout <<"\n0-Vixod\n"; cin>>c;
  if (c=='0') break;
  cout<<"vvesti text <=50\n";
  cin>>s; //cin.getline(s, 50);
  TString str(s);
  str.prn();
             }
}
Проблема в том что выдает видимо после печати исключение
Нарушение прав доступа при чтении "0xccccccc0"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2014, 11:52     Исключение Нарушение прав доступа при чтении
Посмотрите здесь:

Нарушение прав доступа при чтении C++
C++ Нарушение прав доступа при чтении
C++ Необработанное исключение. Нарушение прав доступа при чтении
Нарушение прав доступа при чтении C++
C++ Нарушение прав доступа при чтении
C++ Нарушение прав доступа при чтении
C++ Необработанное исключение по адресу 0x00ED4891 в strings.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC
C++ Необработанное исключение по адресу 0x00105FD7 в Динамические структуры: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCE09
C++ Нарушение прав доступа при чтении
C++ Нарушение прав доступа при чтении
Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу C++
C++ Необработанное исключение по адресу 0x008B94C5. 0xC0000005: нарушение прав доступа при чтении по

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Worf
42 / 42 / 6
Регистрация: 06.02.2014
Сообщений: 227
23.04.2014, 11:56     Исключение Нарушение прав доступа при чтении #2
Прогони выполнение проги в отладочном режиме и посмотри, когда у тебя вылетает и поймёшь, от чего
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
23.04.2014, 12:03     Исключение Нарушение прав доступа при чтении #3
Цитата Сообщение от eugrita Посмотреть сообщение
TSymb *smb[3];
Ну и какую роль здесь выполняют указатели? Я скажу какую: портят память и больше ничего полезного! Потому что массив сам по себе статический!
А память портится из-за отсутствия конструктора копирования,
отсутствия оператора "="
отсутствия деструктора.

Поэтому, либо добаваляй всё перечисленное, либо используй TSymb smb[3];
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 414
23.04.2014, 13:06  [ТС]     Исключение Нарушение прав доступа при чтении #4
Не понял про отсутствие оператора "="
TSymb *smb[3] означала у меня агрегацию по ссылке (символы могут существовать и при уничтожении слова)
вариант TSymb smb[3]; означает агрегацию по значению - композицию. Не важно как это обзывать- лишь для понимания. Если прямо так TSymb smb[3]; то говорит -нет подходящего конструктора
вот сделал такой вариант с вектором (композиция)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class TString//объект «строка»- массив из 15 симв, умеющий выводить на печать зн своих элем 
{ private:   
   char *Ref;
  vector <TSymb> smb; 
  public:
     TString(char *ref);
     ~TString(void) {  delete Ref;}
      void prn();
};
 
TString::TString(char *ref)
{  char c;
    for (int i=0;i<3;i++){
     c=ref[i];
     smb.push_back(TSymb(c));
    }
}
void TString::prn()
{ 
    for(int i=0;i<3;i++)
        smb[i].printCH();
}
теперь хоть печатает, но в конце опять то же исключение по доступу.
Надо видно еще деструкторы делать.

Добавлено через 54 секунды
Не понял про отсутствие оператора "="
TSymb *smb[3] означала у меня агрегацию по ссылке (символы могут существовать и при уничтожении слова)
вариант TSymb smb[3]; означает агрегацию по значению - композицию. Не важно как это обзывать- лишь для понимания. Если прямо так TSymb smb[3]; то говорит -нет подходящего конструктора
вот сделал такой вариант с вектором (композиция)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class TString//объект «строка»- массив из 15 симв, умеющий выводить на печать зн своих элем 
{ private:   
   char *Ref;
  vector <TSymb> smb; 
  public:
     TString(char *ref);
     ~TString(void) {  delete Ref;}
      void prn();
};
 
TString::TString(char *ref)
{  char c;
    for (int i=0;i<3;i++){
     c=ref[i];
     smb.push_back(TSymb(c));
    }
}
void TString::prn()
{ 
    for(int i=0;i<3;i++)
        smb[i].printCH();
}
теперь хоть печатает, но в конце опять то же исключение по доступу.
Надо видно еще деструкторы делать.

Добавлено через 27 минут
Ну все добавил деструктор
C++
1
2
TString::~TString() 
{  smb.clear();}
и перестало валиться
Yandex
Объявления
23.04.2014, 13:06     Исключение Нарушение прав доступа при чтении
Ответ Создать тему
Опции темы

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