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

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

Войти
Регистрация
Восстановить пароль
 
DipPenguin
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 11
#1

Добавление элемента в динамич. структуру , ошибка с 1 элементом - C++

27.04.2014, 19:10. Просмотров 217. Ответов 1
Метки нет (Все метки)

Задание сформировать карточки для пациентов путем добавления в массив структур .Возникла ошибка , при добавление второго и последущих новых карточек коверкается элемент "фамилия" в самом первом массиве структур .Перед выходом из функции переменная имеет нормальное значение но после возращенния в главную часть переменная меняет значение , как исправить ? (107 строка)
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <iostream>
#include <string.h>
 
using namespace std;
 
struct Data //сама структура
{
    char surname[20];
    char name[20];
    char year[20];
    char group[20];
    char number[20];
    char card[20];
    char address[20];
};
 
void func(Data *mas, int size)
{
             Data *cop = new Data [size-1];
            //Data *copy = new Data [size-1];//создаем новую структуру для копирования в нее данных
 
            for(int i = 0; i < size-1; i++)//копируем данные перед отчисткой памяти объекта р
            {
                strcpy(cop[i].surname, mas[i].surname);
                strcpy(cop[i].name, mas[i].name);
                strcpy(cop[i].year, mas[i].year);
                strcpy(cop[i].group, mas[i].group);
                strcpy(cop[i].number, mas[i].number);
                strcpy(cop[i].card, mas[i].card);
                strcpy(cop[i].address, mas[i].address);
            }
 
            delete [] mas; //освобождаем  память
 
            mas = new Data[size]; //выделяем новую память
 
            for (int i = 0; i < size-1; i++) // обратное копирование в объект р
            {
                strcpy(mas[i].surname, cop[i].surname);
                strcpy(mas[i].name, cop[i].name);
                strcpy(mas[i].year, cop[i].year);
                strcpy(mas[i].group, cop[i].group);
                strcpy(mas[i].number, cop[i].number);
                strcpy(mas[i].card, cop[i].card);
                strcpy(mas[i].address, cop[i].address);
            }
 
            delete [] cop; //освобождаем память
          cout << "КОНЕЦ функции:  " << mas[0].surname << ";\n";
 
}
 
 
main()
{
    setlocale(LC_ALL, "rus");//что бы компилятор понимал рус язык внутри проги!!
 
    Data *p = new Data[1];//объект структуры
 
    int var = 1; //будет хранить выбор пользователя (продолжить или выйти)
    int size = 0; //размер массива структур
 
    while (var)
    {
        size++;//счетчик +1
        if(size == 1)//просто вносим данные в 0-е элементы
        {
        cout << "Фамилия: ";
        cin >> p[size-1].surname;
 
        cout << "Имя: ";
        cin >> p[size-1].name;
 
        cout << "Год рождения: ";
        cin >> p[size-1].year;
 
        cout << "Группа крови: ";
        cin >> p[size-1].group;
 
        cout << "Номер телефона: ";
        cin >> p[size-1].number;
 
        cout << "Номер мед.карты: ";
        cin >> p[size-1].card;
 
        cout << "Адрес: ";
        cin >> p[size-1].address;
        cout << "\n";
        cout << "_____________________________________________";
        cout << "\n";
 
        cout << "ИМЕЮЩИЕСЯ ДАННЫЕ:  "<< "\n";
        cout << "Фамилия:  " << p[size-1].surname << ";\n";
        cout << "Имя:  " << p[size-1].name << ";\n";
        cout << "Год рождения:  " <<  p[size-1].year << ";\n";
        cout << "Группа крови:  " << p[size-1].group << ";\n";
        cout << "Номер телефона:  " << p[size-1].number << ";\n";
        cout << "Номер медкарты:  " << p[size-1].card << ";\n";
        cout << "Адрес:  " << p[size-1].address << ";\n";
        cout << "\n";
 
       //cout << "Элементы структуры объекта Р:  " << p[size-1].surname << "  " <<  p[size-1].name <<" "<< p[size-1].year << " "<< p[size-1].group << " "<< p[size-1].number <<" "<< p[size-1].card << " "<< p[size-1].address <<";\n";
        }
        else//size > 1
        {
 
       //ВОТ ЗДЕСЬ НАЧИНАЕТСЯ КОСЯК !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        cout << "До входа <<<:  " << p[0].surname << ";\n";
        func(p,size);
        cout << "После выхода>>>:  " << p[0].surname << ";\n";
        cout << "Фамилия: ";
        cin >> p[size-1].surname;
        cout << "Имя: ";
        cin >> p[size-1].name;
 
        cout << "Год рождения: ";
        cin >> p[size-1].year;
 
        cout << "Группа крови: ";
        cin >> p[size-1].group;
 
        cout << "Номер телефона: ";
        cin >> p[size-1].number;
 
        cout << "Номер мед.карты: ";
        cin >> p[size-1].card;
 
        cout << "Адрес: ";
        cin >> p[size-1].address;
        cout << "\n";
        cout << "_____________________________________________";
        cout << "\n";
 
            for (int i = 0; i < size; i++)//выводим все данные  на экран
            {
                cout << i+1 << "-е ИМЕЮЩИЕСЯ ДАННЫЕ:  "<< "\n";
                cout << "Фамилия:  " << p[i].surname << ";\n";
                cout << "Имя:  " << p[i].name << ";\n";
                cout << "Год рождения:  " <<  p[i].year << ";\n";
                cout << "Группа крови:  " << p[i].group << ";\n";
                cout << "Номер телефона:  " << p[i].number << ";\n";
                cout << "Номер медкарты:  " << p[i].card << ";\n";
                cout << "Адрес:  " << p[i].address << ";\n";
                cout << "\n";
               // cout << i+1 << "-е элементы структуры объекта Р:  " << p[i].surname << "  " <<  p[i].name <<" "<< p[i].year << " "<< p[i].group << " "<< p[i].number <<" "<< p[i].card << " "<< p[i].address <<";\n";
            }
        }
 
 
       // cout << "Фамилия:  " << p[0].surname << ";\n";
        cout << "\nВнести еще данные - 1, выход - 0: ";
        cin >> var;
        while(var != 0 && var != 1)//если пользователь ввел не 0 и не 1
        {
            cout << "Ошибка ввода!\n";
                cout << "\nВнести еще данные - 1, выход - 0: ";
                cin >> var;
        }
    }
 
 
 
    delete [] p;//освобождение памяти перед завершением работы программы
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2014, 19:10     Добавление элемента в динамич. структуру , ошибка с 1 элементом
Посмотрите здесь:

Добавление элемента перед элементом с заданной информативной частью - C++
Двусвязный список. Есть функция добавления элемента после элемента с заданной информативной частью. void List::AddAfter(string n, string...

Два динамич. массива, размер увеличивается+1. MSVS ошибка - C++
полдня ломаю голову, не могу понять что не так и где что выходит, посмотрите, пожалуйста. Хуже то, что Code::Blocks работает, а VS2015...

Ошибка при вводе разного кол-ва строк и столбцов в матрицы. Динамич. матрицы/массивы - C++
Дана матрица, размерность вводит пользователь, данные тоже. Осуществить сортировку вставками, массива, который будет получен из суммы...

Добавление имен в структуру - C++
Всем доброе время суток! Такое задание: Создать структуру ВИДЕОМАГАЗИН со следующими полями: struct Name{ Название фильма ...

создание структуру СТРАНА. добавление и удаление элементов из структуры - C++
Сформируйте двоичный файл из элементов, заданной в варианте структуры, напечатайте его содержимое, выполните удаление и добавление...

Удаление максимального элемента из списка с предыдущим элементом - C++
Удаление максимального элемента из списка с предыдущим элементом Вот набросок программы, который удаляет максимальный элемент. Подскажите...

Алгоритм поиска элемента последовательности, не являющегося элементом второй - C++
Доброго времени суток! Выполняя очередную лабораторную по программированию, наткнулся на проблему выбора наиболее быстрого алгоритма для...

обращение к динамич массиву - C++
Задание:Дана целочисленная квадратная матрица. Определить сумму элементов в тех строках, которые не содержат отрицательных...

Ввод информации в структуру и поиск минимального элемента - C++
Помогите, пожалуйста, с этим кодом... Как бы я не танцевал над ним, не получается довести ее до ума:cry: Кто чем может, помогите, в долгу...

Структура: Организовать поиск элемента и проверку на совпадение его с минимальным элементом списка. - C++
Задачи программы. На входе задано линейный список М из n целых чисел. Известно, что большинство элементов этого списка равны нулю....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5240 / 4560 / 1532
Регистрация: 14.04.2014
Сообщений: 18,125
27.04.2014, 22:35     Добавление элемента в динамич. структуру , ошибка с 1 элементом #2
Ты передаёшь указатель в func(), а там делаешь delete, после чего он теряет актуальность.
Опиши функцию как
C++
1
Data * func(Data *mas, int size)
В начале делай
C++
1
Data *cop = new Data [size]
Строки 35-49 вообще выбрось, обратное копирование - это чушь. В конце делай
C++
1
return cop;
А вызов делай так
C++
1
p = func(p, size);
Ответ Создать тему
Опции темы

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