Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/92: Рейтинг темы: голосов - 92, средняя оценка - 4.70
14 / 0 / 1
Регистрация: 11.12.2011
Сообщений: 29

Как правильно выделить память под структуру?

06.01.2012, 13:00. Показов 18241. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеются структуры
C++
1
2
3
4
5
6
7
8
9
10
struct ship
{
    struct point first;
    struct point last;
};
struct point
{
    int x;
    int y;
};
как правильно организовать, чтобы при сборке в релизе не было ошибок?
C++
1
struct ship *s = malloc(sizeof(struct ship));
маллок требует преобразования типов, и вот в этом загвоздка
может, можно использовать другие функции выделения памяти?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.01.2012, 13:00
Ответы с готовыми решениями:

Как правильно выделить память под двумерный массив в шаблоне?
template <class T> T* array <T>::f (unsigned size) { //...... T* templateBuf = new T ; for (unsigned index = 0;...

Как выделить память под длинную строку?
Всем привет. Мне нужно сделать поразрядную сортировку пар ключ(число от 0 до 2^64) значение(строка не больше 2048 символов) по ключу. Для...

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

9
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
06.01.2012, 13:02
Цитата Сообщение от somebody11 Посмотреть сообщение
может, можно использовать другие функции выделения памяти?
На С не знаю, но на с++ так можно:
new/delete
C++
1
2
3
ship* s = new ship;
//...
delete s;
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
06.01.2012, 13:11
Цитата Сообщение от somebody11 Посмотреть сообщение
маллок требует преобразования типов
Так преобразууйте, в чём проблема?
C
1
struct ship *s = (struct ship *)malloc(sizeof(struct ship));
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
06.01.2012, 14:42
Цитата Сообщение от somebody11 Посмотреть сообщение
маллок требует преобразования типов, и вот в этом загвоздка
Ничего подобного, компиляторы С(не плюсов) должны есть не подавившись. Более того, ручной каст возврата *alloc считается плохой практикой.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
06.01.2012, 14:56
Цитата Сообщение от NoMasters Посмотреть сообщение
Более того, ручной каст возврата *alloc считается плохой практикой.
Впервые слышу. А причины?
0
14 / 0 / 1
Регистрация: 11.12.2011
Сообщений: 29
06.01.2012, 15:17  [ТС]
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так преобразууйте, в чём проблема?
C
1
struct ship *s = (struct ship *)malloc(sizeof(struct ship));
да уже сообразила сама, просто никогда со структурами не возилась, спасибо
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
06.01.2012, 15:21
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так преобразууйте, в чём проблема?
Если я не ошибаюсь, то в Си возможно и
C
1
struct ship *s = malloc(sizeof(struct ship));
В С++ необходимо явное преобразование.
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
06.01.2012, 15:23
Цитата Сообщение от silent_1991 Посмотреть сообщение
Впервые слышу. А причины?
Точно не помню, это было K&R, что-то про глупые ошибки при работе с типами, когда подобный каст маскирует ошибки.
1
06.01.2012, 15:32

Не по теме:

NoMasters, в принципе обоснованно. Но всё-таки не стоит забывать, что мы пишем на С, который предоставляет программисту огромный простор для ошибок и вольностей. Например, мы не привели тип явно (благо стандарт языка позволяет вольно обходиться с типами и компилятор может сам проводить большинство преобразований). Но, во-первых, тут мы работаем с указателями, а это целая гора потенциальных ошибок, а во-вторых, в случае с динамическим выделением памяти, никто не мешает нам указать не реально необходимый размер запрашиваемой памяти, а больший (что в принципе не так и страшно), а то и меньший (что куда серьёзнее). Поэтому явный каст, мне кажется, просто вопрос стиля. Я, например, почти всегда пишу верный тип, не полагаясь на компилятор (например, если функция ждёт дабл, я передам не 2, а 2.0). Так лично мне удобнее.

0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
07.01.2012, 10:41
Цитата Сообщение от NoMasters Посмотреть сообщение
Точно не помню, это было K&R, что-то про глупые ошибки при работе с типами, когда подобный каст маскирует ошибки.
да не, там наоборот - можно не приводить, но для ясности кода можно привести
(и много где приводится, в пункте про hashtable, например)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2012, 10:41
Помогаю со студенческими работами здесь

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

Как выделить память под динамические переменные при создании класса?
В прошлой теме ответ получил, но не до конца. Вопрос такой, как выделить память под динамические переменные? Вот часть кода ...

Как выделить память под динамический массив объектов пользовательского типа (структур)?
Пытаюсь выделить память под динамический массив для структур, однако она не выделяется. Получается почему-то простой указатель на value. Не...

Не могу правильно выделить память
Прошу помощи #include "stdafx.h" #include <stdio.h> #include <math.h> #include <windows.h> #include <memory.h> #include...

Выделить память под переменную
объявляет переменные и выделяет память под них как в с++ ?? обьявить переменную и выделить ей память?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru