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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
RocBoy-D
32 / 31 / 7
Регистрация: 10.03.2012
Сообщений: 362
#1

Выделение динамической памяти под массив структур - C++

05.09.2012, 20:48. Просмотров 1391. Ответов 3
Метки нет (Все метки)

Здравствуйте! Пытаюсь выделить память под массив структур, считать с клавиатуры, вывести на экран и удалить выделенную память. Подскажите в чем ошибка?

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
#include <iostream>
#include <cstring>
 
using namespace std;
 
struct Country
{
    char *name;
    char *continent;
    unsigned long people;
};
 
void SetValue (Country *PCountry, char *CurrentCountry, char *CurrentContinent, unsigned long CurrentPeople, int CurrentN)
{
    PCountry [CurrentN]. name = new char [strlen (CurrentCountry) + 1];
    strcpy(PCountry [CurrentN]. name, CurrentCountry);
    PCountry [CurrentN]. continent = new char [strlen (CurrentContinent) + 1];
    strcpy(PCountry [CurrentN]. continent, CurrentContinent);
    PCountry [CurrentN]. people = CurrentPeople;
}
 
void FreeMem (Country *PCountry)
{
    delete [] PCountry -> name;
    PCountry -> name = NULL;
    delete [] PCountry -> continent;
    PCountry -> continent = NULL;
}
 
int main()
{
    Country *ArrCountry = NULL;
    int N;
    unsigned long CurrentPeople;
    char CurrentName [50], CurrentContinent [25];
 
    FreeMem(ArrCountry);
    for (int i = 0; i < 3; i ++)
    {
       cout << "Input country's name: ";
       cin >> CurrentName;
       cout << "Input continent's name: ";
       cin >> CurrentContinent;
       cout << "Input number of people: ";
       cin >> CurrentPeople;
       cout << endl;
       SetValue (ArrCountry, CurrentName, CurrentContinent, CurrentPeople, i);
    }
 
    for (int i = 0; i < 3; i ++)
    {
       cout << ArrCountry [i]. name << endl;
       cout << ArrCountry [i]. continent << endl;
       cout << ArrCountry [i]. people << endl;
       cout << endl;
    }
 
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2012, 20:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение динамической памяти под массив структур (C++):

Выделение динамической памяти под массив структур - C++
Добрый день, уважаемые! Пишу функцию выделения памяти под массив структур. Но программа не хочет правильно работать. подскажите пожалуйста,...

Выделение динамической памяти под массив из класса - C++
Допустим, есть class c, и он включает в себя char-массив a: class c { private: char a; public: c(); c(char* a); }

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

Выделение памяти под массив структур - C++
Добрый день. Подскажите в чём ошибка. #pragma hdrstop #pragma argsused #include &lt;stdio.h&gt; #include &lt;iostream&gt; struct...

Динамическое выделение памяти под массив структур (new/delete) - C++
Люди добрые, подскажите пожалуйста, где в моем коде закралась ошибка? Интернет перечитал, во всех примерах код, подобный моему работает, а...

Структуры выделение динамической памяти под массивы - C++
Здравствуйте, Мне нужно создать массив из элементов структуры, и использовать для этого динамическую память,подскажите пожалуйста, в чем...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.09.2012, 20:57 #2
Цитата Сообщение от RocBoy-D Посмотреть сообщение
Здравствуйте! Пытаюсь выделить память под массив структур, считать с клавиатуры, вывести на экран и удалить выделенную память. Подскажите в чем ошибка?
это мы хотим вас спросить в чем ошибка? что не так? что пишет компилятор? или он тоже молчит?
0
RocBoy-D
32 / 31 / 7
Регистрация: 10.03.2012
Сообщений: 362
05.09.2012, 23:21  [ТС] #3
panicwassano, В CodeBlocks - аварийное завершение работы программы после первой введенной структуры, а в Borland C++ сообщение Null pointer assignment
0
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
06.09.2012, 00:06 #4
RocBoy-D, Для начала надо Country *ArrCountry = new Country [3]; а потом уже в конце программы FreeMem() делать, только вот таким образом - FreeMem(ArrCountry); освободите память только одного элемента массива. Можно сделать так:
C++
1
2
for (int i = 0; i < 3; i ++)
   FreeMem(ArrCountry + i);
И после уже FreeMem() надо delete [] ArrCountry;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2012, 00:06
Привет! Вот еще темы с ответами:

Выделение памяти под массив - C++
Требуется выделить память под матрицу. Будет ли следующий код работать корректно? //глобальная область int x_size = 3; ...

Выделение памяти под массив - C++
в массиве данных хранять в последовательных ячейках памяти В программе, выделенна память под массив, для ввода данных пользователем. ...

Динамическое выделение памяти под массив - C++
Доброго времени суток. Как реализовать динамическое выделение памяти под массив, к примеру размера n, при том, что значение этого n в...

Динамическое выделение памяти под массив - C++
Я хочу функцию использовать пару раз, количество команд будет уменьшаться, и &quot;n&quot; надо менять. Как написать не знаю. 12 или 13 строка. ...


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

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

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