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

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

Войти
Регистрация
Восстановить пароль
 
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
#1

Как объявлять и инициализировать динамические структуры? - C++

19.02.2014, 16:42. Просмотров 315. Ответов 11
Метки нет (Все метки)

С помощью операции new нужно создать массив из трёх элементов структуры. Пытался это сделать, но возникают проблемы из присваиванием значений членам структуры. Был бы признателен и за просто разъяснение, как нужно объявлять такие динамические структуры, а потом устанавливать значение членам структуры.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2014, 16:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как объявлять и инициализировать динамические структуры? (C++):

Нюансы работы со строками: как в C++ можно объявлять и инициализировать строки? - C++
Добрый день! Подскажите пожалуйста, как в 17-ой строке присвоить слово? Один символ присваивается, но со словом и тем более предложением...

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры) - C++
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом создаю экземпляр, Subject G; ...

Как создаются динамические структуры - C++
Добрый вечер всем!!!:) Подскажите пожалуйста, как создаются динамические структуры. Если не сложно, объясните, как из этой вот структуры...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё. - C++
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

Динамические структуры данных - C++
(можно с пояснением,что-то не понимаю) Есть строка символов, признаком конца которой является ;. В строке могут быть фигурные, круглые,...

Динамические структуры данных - C++
Выполнить задания 3 способами: с использованием стека, очереди, дека. Описание соответствующих типов и набор всех необходимых для их...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.02.2014, 16:46 #2
C++
1
2
T* arr = new T[size]; // T - тип, arr - имя дин.массива, size - кол-во эл-ов.
T* p = &arr[i]; // p - указатель на i-ый элемент массива.
Дальше обращение к полям по указателю:
C++
1
p->имя_поля ...
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6471 / 3119 / 306
Регистрация: 04.12.2011
Сообщений: 8,594
Записей в блоге: 4
19.02.2014, 16:58 #3
Цитата Сообщение от montkay Посмотреть сообщение
а потом устанавливать значение членам структуры.
Члены могут потребовать выделения памяти. Например если это указатели. А конструктор по умолчанию определён неверно. Покажите код.
0
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
19.02.2014, 17:12  [ТС] #4
Вот код, IGPIGP. Компилятор сообщает постоянно об ошибке. Не могу понять - почему.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <iostream>
using namespace std;
 
struct CandyBar
{
    const char name[20];
    double weight;
    int calories;
};
 
int main()
{
    CandyBar *pn = new CandyBar [3];
    pn->name = "Mocha Munch";
    pn->weight = 7.9;
    pn->calories = 300;
    return 0;
}
Добавлено через 1 минуту
Спасибо, Tulosba. Сейчас испытаю!
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
19.02.2014, 17:19 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от montkay Посмотреть сообщение
pn->name = "Mocha Munch";
во первых строки так не копируются используй strcpy
http://ru.wikipedia.org/wiki/Strcpy
во вторых
а к какому элементу ты обращаешься?
эта строчка должна выглядеть так, обращение к первому(нулевому) элементу
C++
1
strcpy(pn[0].name,"Mocha Munch");
соответственно эта
Цитата Сообщение от montkay Посмотреть сообщение
pn->weight = 7.9;
вот так
C++
1
 pn[0].weight = 7.9;
1
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.02.2014, 17:27 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ValeryS Посмотреть сообщение
вот так pn[0].weight = 7.9;
А я уже думал что-то по забыл глядя на
pn->weight = 7.9;
А во вторых ValeryS, вас не смущает что тип у него const char name[20], а не просто char name[20]?
1
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
19.02.2014, 18:03  [ТС] #7
ValeryS, Спасибо большое! Просветлили меня =) Сейчас буду пробовать.

Добавлено через 25 минут
ValeryS, скажите ещё пожалуйста, если Вас это не затруднит: как удалить правильно такой динамический массив. Пытался таким способом удалить (ниже), но постоянно выводит "Memory Leaks":

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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <memory.h>
using namespace std;
 
struct CandyBar
{
    char name[20];
    double weight;
    int calories;
};
 
int main()
{
    CandyBar *pn = new CandyBar [3];
    strcpy_s(pn[0].name, "Mocha Munch");
    pn[0].weight = 7.9;
    pn[0].calories = 300;
    strcpy_s(pn[1].name, "Roshen");
    pn[1].weight = 0.9;
    pn[1].calories = 600;
    strcpy_s(pn[2].name, "Gold Key");
    pn[2].weight = 1.5;
    pn[2].calories = 500;
    cout << "Here is the first product " << pn[0].name;
    cout << " and its weight is " << pn[0].weight;
    cout << ".\n It has " << pn[0].calories << " calories." << endl;
    cout << "Here is the second product " << pn[1].name;
    cout << " and its weight is " << pn[1].weight;
    cout << ".\n It has " << pn[1].calories << " calories." << endl;
    cout << "Here is the third product " << pn[2].name;
    cout << " and its weight is " << pn[2].weight;
    cout << ".\n It has " << pn[2].calories << " calories." << endl;
    delete [] pn;
    if (_CrtDumpMemoryLeaks)
        cout << "Memory Leaks" << endl;
    else
        cout << "All good" << endl;
    return 0;
}
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
19.02.2014, 18:24 #8
Цитата Сообщение от mustimur Посмотреть сообщение
А во вторых ValeryS, вас не смущает что тип у него const char name[20], а не просто char name[20]?
меня нет пущай смущает того кто пишет
Цитата Сообщение от montkay Посмотреть сообщение
: как удалить правильно такой динамический массив. Пытался таким способом удалить
все правильно так и удаляется
Цитата Сообщение от montkay Посмотреть сообщение
_CrtDumpMemoryLeaks
а это кто такой?
если ты имеешь ввиду
http://msdn.microsoft.com/ru-ru/library/d41t22sb.aspx
то это функция
следовательно вызывать нужно
C++
1
 _CrtDumpMemoryLeaks( );
но это лишнее
она работает в отладочной версии

Добавлено через 9 минут
вот еще
http://www.rsdn.ru/article/vcpp/leaks.xml
1
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
19.02.2014, 18:36  [ТС] #9
ValeryS, эта функция(_CrtDumpMemoryLeaks( )) дает значение true или false. Так как у меня происходит утечка памяти, выводиться "Memory Leaks" в конце программы, а должно выводить "All good". Вот и хотел уточнить, как нужно удалять такие динамические массивы.

Добавлено через 2 минуты
ValeryS, теперь я нашел свою ошибку. Всё работает замечательно. Спасибо за помощь!
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
19.02.2014, 18:41 #10
Цитата Сообщение от montkay Посмотреть сообщение
эта функция(_CrtDumpMemoryLeaks( ))
а теперь сравни
Цитата Сообщение от montkay Посмотреть сообщение
if (_CrtDumpMemoryLeaks)
и внимательно прочитай МСДН
Dumps all the memory blocks in the debug heap when a memory leak has occurred (debug version only).
Сбрасывает все блоки памяти в отладочной куче при утечка памяти произошла (отладочную версию только).
0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.02.2014, 18:47 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
меня нет пущай смущает того кто пишет

Не по теме:

Тоже верно

0
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
19.02.2014, 18:52  [ТС] #12
ValeryS, ранее же написал, что нашел свою ошибку =) Но спасибо, что всем продемонстрировали, где она находиться =)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 18:52
Привет! Вот еще темы с ответами:

Динамические структуры данных - C++
Здравствуйте. Есть такой код в таких файлах: Основной .cpp-файл программы#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include...

Динамические структуры Book - C++
Подскажите пожалуйста, как запихнуть в элемент (BOOK** k) структуры (KART) адрес созданной одиночной динамической переменной структуры...

Динамические структуры данных. Дек - C++
Ребята помогите, горит степуха! Динамически разработать и реализовать на языке С следующие функции работой с Деком: 1. Создание...

Динамические структуры данных. Списки - C++
Ребят, срочно нужна помощь, помогите пожалуйста, кто чем может! Задание: В деке задать слово. Определить, является ли оно...


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

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

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