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

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

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

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

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

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

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

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

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

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

Visual Studio (Динамические структуры) - C++
Доброго времени суток. Нужна помощи в теории, у меня есть готовая "Консольная прога" (обычный список с классом и набор функций типа...

Динамические структуры: линейные списки - C++
Люди помогите:wall: Дали задачу из учебника Павловской Вот вроде смотрю как в учебнике написано про линейные списки все понятно. Как...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 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->имя_поля ...
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,490
Записей в блоге: 4
19.02.2014, 16:58     Как объявлять и инициализировать динамические структуры? #3
Цитата Сообщение от montkay Посмотреть сообщение
а потом устанавливать значение членам структуры.
Члены могут потребовать выделения памяти. Например если это указатели. А конструктор по умолчанию определён неверно. Покажите код.
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. Сейчас испытаю!
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
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;
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]?
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;
}
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
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
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
19.02.2014, 18:36  [ТС]     Как объявлять и инициализировать динамические структуры? #9
ValeryS, эта функция(_CrtDumpMemoryLeaks( )) дает значение true или false. Так как у меня происходит утечка памяти, выводиться "Memory Leaks" в конце программы, а должно выводить "All good". Вот и хотел уточнить, как нужно удалять такие динамические массивы.

Добавлено через 2 минуты
ValeryS, теперь я нашел свою ошибку. Всё работает замечательно. Спасибо за помощь!
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
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).
Сбрасывает все блоки памяти в отладочной куче при утечка памяти произошла (отладочную версию только).
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
19.02.2014, 18:47     Как объявлять и инициализировать динамические структуры? #11
Цитата Сообщение от ValeryS Посмотреть сообщение
меня нет пущай смущает того кто пишет

Не по теме:

Тоже верно

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 18:52     Как объявлять и инициализировать динамические структуры?
Еще ссылки по теме:

динамические структуры не получается продублировать элемент - C++
Здравствуйте... При решение данной задачи &lt;В составе программы описать функцию, которая дублирует вхождение каждого элемента списка One и...

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

Динамические структуры данных. Односвязные списки - C++
Вот код. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;iostream&gt; using namespace std; const int k = 101;...

Динамические структуры данных Вариант 18 Павловской - C++
И вот еще одна задачка из динамических массивов. Буду рад любой помощи!!! :help: На междугородной телефонной станции картотека...


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

Или воспользуйтесь поиском по форуму:
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
19.02.2014, 18:52  [ТС]     Как объявлять и инициализировать динамические структуры? #12
ValeryS, ранее же написал, что нашел свою ошибку =) Но спасибо, что всем продемонстрировали, где она находиться =)
Yandex
Объявления
19.02.2014, 18:52     Как объявлять и инициализировать динамические структуры?
Ответ Создать тему
Опции темы

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