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

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

Восстановить пароль Регистрация
 
DigsiL
9 / 9 / 1
Регистрация: 14.01.2011
Сообщений: 113
19.06.2011, 22:24     Ошибка при завершении программа. #1
Проблема в следующим когда я создаю 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2011, 22:24     Ошибка при завершении программа.
Посмотрите здесь:

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

у тебя же указатели в полях есть
DigsiL
9 / 9 / 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);
эти методы надо переписать

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

щас подсобим, секундочку
DigsiL
9 / 9 / 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;
}
Dmitry_gdv
 Аватар для Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 351
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 секунд
щас чувак
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,269
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);
и пробуй чё получится.
Dmitry_gdv
 Аватар для Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 351
19.06.2011, 23:17     Ошибка при завершении программа. #11
ану пробуй
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,269
19.06.2011, 23:21     Ошибка при завершении программа. #12
ошибся
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2011, 23:23     Ошибка при завершении программа.
Еще ссылки по теме:

C++ Ошибка в завершении работы программы
C++ Ошибка компилятора при завершении программы
C++ Ошибка "Stack around the variable 'a' was corrupted" при завершении программы

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

Или воспользуйтесь поиском по форуму:
Dmitry_gdv
 Аватар для Dmitry_gdv
64 / 64 / 5
Регистрация: 18.03.2010
Сообщений: 351
19.06.2011, 23:23     Ошибка при завершении программа. #13
ой как присмотрелся к твоему коду - ошибка на ошибке

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

удачи ...
Yandex
Объявления
19.06.2011, 23:23     Ошибка при завершении программа.
Ответ Создать тему
Опции темы

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