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

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

Войти
Регистрация
Восстановить пароль
 
DigsiL
10 / 10 / 1
Регистрация: 14.01.2011
Сообщений: 113
#1

Ошибка при завершении программа. - C++

19.06.2011, 22:24. Просмотров 539. Ответов 12
Метки нет (Все метки)

Проблема в следующим когда я создаю 3 объект case 1 и пробую после этого вывести case 2 вылетает ошибка в чем проблема ???

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <Windows.h>
#include "Worker.h"
using namespace std;
class CWorker
{
public:
    CWorker(void);
    void Input (char *lastname1,char *post1,int year1,int salary1,int ID1);
    void Show ();
    ~CWorker(void);
private:
    char *lastname;
    char *post; 
    int year;
    int salary;
    int ID;
 
};
 
CWorker::CWorker(void)
{
}
 
void CWorker::Input(char *lastname1,char *post1,int year1,int salary1,int ID1)
{
    ID=ID1;
    lastname=new char [strlen(lastname1+1)];
    strcpy(lastname,lastname1);
    post= new char [strlen(post1)+1];
    strcpy(post,post1);
    year=year1;
    salary=salary1;
}
void CWorker::Show()
{
    cout<<"ID:"<<ID<<endl;
    cout<<"Фамилия:"<<lastname<<endl;
    cout<<"Должность:"<<post<<endl;
    cout<<"Зарплата:"<<salary<<endl;
    cout<<"Год работы:"<<year<<endl;
}
 
CWorker::~CWorker(void)
{
}
 
void WorkerDatabase (CWorker *&worker)
{
    worker[0].Input("Фисенко А.С.","Директор",2000,10000,1);
    worker[1].Input("Сидоров В.В.","Помошник",2010,1000,2);
}
void AddWorker (CWorker *&worker,int &size)
{
    CWorker *temp=new CWorker [size+=1];
    for (int i=0;i<size-1;i++)
    {
        temp[i]=worker[i];
    }
    worker=new CWorker [size];
    for (int i=0;i<size-1;i++)
    {
        worker[i]=temp[i];
    }
    //delete []temp;
}
 
void main ()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int key=NULL;
    int size=2;
    char lastname[20];
    char post[20];
    int ID=size;
    int year=NULL;
    int salary=NULL;
    CWorker *worker=new CWorker [size];
    WorkerDatabase (worker);
    do
    {
        cout<<"1.Добавить нового сотрудника"<<endl;
        cin>>key;
        switch (key)
        {
        case 1:
            {
                AddWorker (worker,size);
                cout<<"Введите Фамилию с инициалами:";
                cin.ignore();
                cin.getline(lastname,20);
                cout<<"Введите должность:";
                cin.getline(post,20);
            cout<<"Введите год поступление на работу:";
                cin>>year;
                cout<<"Введите зарплату:";
                cin>>salary;
                ID+=1;
                worker[size].Input(lastname,post,year,salary,ID);
 
            }break;
        case 2:
            {
                for (int i=0;i<size;i++)
                {
                    worker[i].Show();
                }   
            }break;
        }
    }while(key!=0);
    delete []worker;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2011, 22:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при завершении программа. (C++):

Ошибка при завершении программа. - C++
Проблема в следующим когда я создаю динамический массив объект при завершении программы вылетает ошибка не пойму в чем проблема ??? ...

ошибка при завершении программы - C++
возникает ошибка при завершении программы. при чем после вывода на экран последней строчки. с чем это может быть связано?

Ошибка при завершении программы - C++
Добрый вечер! Помогите плиз, у меня после завершения программы она зависает... Методом тыка) определил что после завершения проги,...

Ошибка при завершении работы программы - C++
Написал программу, но при завершении выдает ошибку. Помогите понять с чем это связанно?

Ошибка компилятора при завершении программы - C++
Я так подозреваю, что где то происходит выход за пределы массива. Хоть vector используй, хоть любую другую структуру, класс или массив,...

Ошибка "Stack around the variable 'a' was corrupted" при завершении программы - C++
Учусь создавать списки. Идея такова чтобы создать список в отдельном cpp, а пользователь имел доступ только к функциям добавления, удаления...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
19.06.2011, 22:42 #2
Можно поподробнее, что ты вводишь?
0
Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 352
19.06.2011, 22:43 #3
Цитата Сообщение от DigsiL Посмотреть сообщение
CWorker *worker=new CWorker [size];
вот он
источник твоих проблем
0
DigsiL
10 / 10 / 1
Регистрация: 14.01.2011
Сообщений: 113
19.06.2011, 22:45  [ТС] #4
Цитата Сообщение от kravam Посмотреть сообщение
Можно поподробнее, что ты вводишь?
Когда я создаю новый объект то есть нажимаю case 1 и заполняю данными после этого пробую вывести его на экран case 2 выскакует ошибка (
0
Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 352
19.06.2011, 22:45 #5
Цитата Сообщение от DigsiL Посмотреть сообщение
CWorker(void);
void Input (char *lastname1,char *post1,int year1,int salary1,int ID1);
эти методы надо переписать

у тебя же указатели в полях есть
0
DigsiL
10 / 10 / 1
Регистрация: 14.01.2011
Сообщений: 113
19.06.2011, 22:48  [ТС] #6
Цитата Сообщение от Dmitry_gdv Посмотреть сообщение
вот он
источник твоих проблем
Понимаю что проблема с выделением памяти а почему она так себя ведет не пойму ???

Добавлено через 2 минуты
CWorker(void);
void Input (char *lastname1,char *post1,int year1,int salary1,int ID1);
эти методы надо переписать

не понимаю зачем этот метод переписывать ???
0
Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 352
19.06.2011, 22:50 #7
потому что ты создаёш несколько объектов, в составе которых есть указатели
а конструктор не перевыделяет для каждого нового свою память
и получается что все они указывают на один и тот же участок памяти

щас подсобим, секундочку
1
DigsiL
10 / 10 / 1
Регистрация: 14.01.2011
Сообщений: 113
19.06.2011, 22:59  [ТС] #8
Цитата Сообщение от Dmitry_gdv Посмотреть сообщение
потому что ты создаёш несколько объектов, в составе которых есть указатели
а конструктор не перевыделяет для каждого нового свою память
и получается что все они указывают на один и тот же участок памяти

щас подсобим, секундочку
Уверен не в этом проблема так как я с помощью метода обрабатываю эти указатели а они указывают на другие переменные из main

C++
1
2
3
4
5
6
7
8
9
10
void CWorker::Input(char *lastname1,char *post1,int year1,int salary1,int ID1)
{
    ID=ID1;
    lastname=new char [strlen(lastname1+1)];
    strcpy(lastname,lastname1);
    post= new char [strlen(post1)+1];
    strcpy(post,post1);
    year=year1;
    salary=salary1;
}
0
Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 352
19.06.2011, 23:11 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CWorker::CWorker(void) {
lastname = 0;
post = 0;
}
void CWorker::Input(const char *lastname,const char *post,int year,int salary,int ID){
this->ID=ID;
delete [] this->lastname;
this->lastname = 0;
this->lastname=new char [strlen(lastname) + 1];
strcpy(this->lastname,lastname);
delete [] this->post;
this->post = 0;
this->post= new char [strlen(post) + 1];
strcpy(this->post,post);
this->year=year;
this->salary=salary;
}


Добавлено через 19 секунд
щас чувак
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
19.06.2011, 23:15 #10
Смотри, в самом первом вызове AddWorker ты добавляешь нового работника, так?
После этого size== 3 так?
И после этого ты пишешь:
C++
1
 worker[size].Input(lastname,post,year,salary,ID);
, где size== 3, напомню.

И вот здесь стоп. Есть worker [0],worker [1] и worker [2], но worker [3], с которым ты пытаешься работать- его просто нет! Исправляй.

Добавлено через 2 минуты
Короче напиши так:
C++
1
worker[size-1].Input(lastname,post,year,salary,ID);
и пробуй чё получится.
1
Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 352
19.06.2011, 23:17 #11
ану пробуй
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
19.06.2011, 23:21 #12
ошибся
0
Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 352
19.06.2011, 23:23 #13
ой как присмотрелся к твоему коду - ошибка на ошибке

Добавлено через 1 минуту
ладно, я пошёл - надоело чужие исправлять - своими щас займусь

удачи ...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2011, 23:23
Привет! Вот еще темы с ответами:

Ошибка в завершении работы программы - C++
... char s1; std::cout&lt;&lt;&quot;Enter the file name\n&quot;; std::cin&gt;&gt;s1; if ((f=fopen(s1,&quot;r&quot;))==NULL) { perror(&quot;&quot;); ...

сделать при завершении - C++
господа можно ли в консольном приложении сделать так,что бы при закрытии окна(например нажатие на крестик)выводилась надпись(любая)

Закрытие именованного канала при завершении работы программы - C++
Добрый день. Пример: int main() { CreateNamedPipe(...); return 0; }

Очистка памяти при завершении работы функции, как правильно возвращать значения? - C++
Я вывел для себя 2 способа возвращать значения работы функции string Add(string a1, string a2) { string returnStr; returnStr +=...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.06.2011, 23:23
Ответ Создать тему
Опции темы

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