Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: cin.getline + gotoxy выдаёт странную ошибку раз/через раз  (Прочитано 12123 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« : 13-10-2007 08:20 » 

Собственно делаю ввод в окошке из псевдографике, с переходом от поля к полю во время ввода.
В конце ввода вылетает странная ошибка

Цитата
Borland C++ for Dos
Процессор NTVDM обнаружил недопустимую инструкцию.
CS:8787 IP:0045 OP:d9 89 0e 8a 00.


Не хотелось бы чтоб при показе курсовой такая ошибка внезапно перед преподователем вылетела. Мб чтото криво написано?

Код ниже :
Цитата
//-----------------------------------------------------------//
struct passanger
 {
  char*fio;
  char*sex;
  int year;
  float weight;
 };

class race
 {
  char*number;
  char*name;
  char*type;
  int APlace;
  int FPlace;
  float cost;
  passanger*ptr;
 public:
  race();
 };
//-----------------------------------------------------------//
race::race()
 {
  char T[5];
  clrscr();
  cout<<"╔════════════════════════════╗\n";
  cout<<"║  Добавление нового рейса.  ║\n";
  cout<<"╚════════════════════════════╝\n";
  cout<<"╔═══════╦══════════════╦══════════╦════════════╦═══════════╗\n";
  cout<<"║ Номер ║ Наименование ║   Тип    ║ Количество ║ Стоимость ║\n";
  cout<<"║ рейса ║    рейса     ║ самолета ║   кресел   ║   билета  ║\n";
  cout<<"╠═══════╬══════════════╬══════════╬════════════╬═══════════╣\n";
  cout<<"║______ ║_____________ ║_________ ║____________║___________║\n";
  cout<<"╚═══════╩══════════════╩══════════╩════════════╩═══════════╝\n";
  gotoxy(2,8);
  cin.getline(number,8);
  gotoxy(10,8);
  cin.getline(name,15);
  gotoxy(25,8);
  cin.getline(type,11);
  gotoxy(36,8);
  cin>>APlace;
  gotoxy(49,8);
  cin>>cost;

 }

void main()
 {

  clrscr();
  race A;

 }
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 13-10-2007 09:02 » 

А кто будет выделять память под строки, куда ты вводиш number, name, type?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 13-10-2007 09:52 » 

 Здесь была моя ладья...

Так автоматически память выделяется когда я вызываю конструктор. И уже в переменные класса для которого был вызван конструктор и заносятся значения этих переменных.

Цитата
race::race()
 {
  gotoxy(2,8);
  cin.getline(number,8);
  gotoxy(10,8);
  cin.getline(name,15);
  gotoxy(25,8);
  cin.getline(type,11);
  gotoxy(36,8);
  cin>>APlace;
  gotoxy(49,8);
  cin>>cost;
 }

race B;

Или я чтото напутал?  Не понял
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 13-10-2007 09:58 » 

Под рукой нет Borland C++ . Но у меня сразу происходил вылет "Segmentation fault (core dumped)" Компилятор g++ (GCC) 4.1.3 20070929. Ну вот и примеры http://www.cplusplus.com/reference/iostream/istream/getline.html .Там нету в описании, что getline сам автоматически выделяет память.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 13-10-2007 10:01 » 

Я не говорю что getline определяет память- getline у меня в функции конструктора, которая вызывается автоматически при создании класса и выделяет память на sizeof(структурный тип класса).

Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 13-10-2007 10:07 » 

Вот твой конструктор
Код:
race::race()
 {
  char T[5];
  clrscr();
  cout<<"╔════════════════════════════╗\n";
  cout<<"║  Добавление нового рейса.  ║\n";
  cout<<"╚════════════════════════════╝\n";
  cout<<"╔═══════╦══════════════╦══════════╦════════════╦═══════════╗\n";
  cout<<"║ Номер ║ Наименование ║   Тип    ║ Количество ║ Стоимость ║\n";
  cout<<"║ рейса ║    рейса     ║ самолета ║   кресел   ║   билета  ║\n";
  cout<<"╠═══════╬══════════════╬══════════╬════════════╬═══════════╣\n";
  cout<<"║______ ║_____________ ║_________ ║____________║___________║\n";
  cout<<"╚═══════╩══════════════╩══════════╩════════════╩═══════════╝\n";
  gotoxy(2,8);
  cin.getline(number,8);
  gotoxy(10,8);
  cin.getline(name,15);
  gotoxy(25,8);
  cin.getline(type,11);
  gotoxy(36,8);
  cin>>APlace;
  gotoxy(49,8);
  cin>>cost;

 }
Покажи мне место, где иницилизируется переменная, класса race, number?

Указатели сами по себе не выделяют память, они только указывают на участок памяти. Да под сам указатель выделяется память. Но он ссылается в никуда. Его еше и нужно иницилизировать. Ну и соответственно в диструкторе класса нужно уничтожить указатель при помоши delete.

Вот если бы ты указал бы char number[255]; скажем, тогда бы компилятор бы сам автоматически вставил бы код для выделения памяти под строку.
« Последнее редактирование: 13-10-2007 10:16 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 13-10-2007 10:23 » 

Всё понял, огромное спасибо-в глазах преподователя после этого бы не поднялся никогда =)
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 13-10-2007 17:20 » new

FallenSoul, не переживай - главное - учиться. ВУЗ не выпускает готовых програмистов - лишь подготавливает. Учиться всему все равно будешь сам.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines