Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
41 / 40 / 23
Регистрация: 10.03.2012
Сообщений: 374

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

05.09.2012, 20:48. Показов 2768. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2012, 20:48
Ответы с готовыми решениями:

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

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

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

3
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
05.09.2012, 20:57
Цитата Сообщение от RocBoy-D Посмотреть сообщение
Здравствуйте! Пытаюсь выделить память под массив структур, считать с клавиатуры, вывести на экран и удалить выделенную память. Подскажите в чем ошибка?
это мы хотим вас спросить в чем ошибка? что не так? что пишет компилятор? или он тоже молчит?
0
41 / 40 / 23
Регистрация: 10.03.2012
Сообщений: 374
05.09.2012, 23:21  [ТС]
panicwassano, В CodeBlocks - аварийное завершение работы программы после первой введенной структуры, а в Borland C++ сообщение Null pointer assignment
0
 Аватар для edward_jonson
163 / 163 / 68
Регистрация: 23.02.2011
Сообщений: 392
06.09.2012, 00:06
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.09.2012, 00:06
Помогаю со студенческими работами здесь

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

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

Правильное выделение динамической памяти для структур
Есть кусок кода работы с массивом структур. struct s{ string a; string b; string c; } arr; int N = 0; void...

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

Выделение области динамической памяти под матрицу
Код: #include&lt;iostream&gt; using namespace std; int main() { int n,m; int i,j,q; int temp,t;


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 01.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 31.01.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru