С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
somebody11
14 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 29
#1

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

06.01.2012, 13:00. Просмотров 3589. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2012, 13:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно выделить память под структуру? (C++):

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

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

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

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

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

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

9
dimcoder
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
06.01.2012, 13:02 #2
Цитата Сообщение от somebody11 Посмотреть сообщение
может, можно использовать другие функции выделения памяти?
На С не знаю, но на с++ так можно:
new/delete
C++
1
2
3
ship* s = new ship;
//...
delete s;
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
06.01.2012, 13:11 #3
Цитата Сообщение от somebody11 Посмотреть сообщение
маллок требует преобразования типов
Так преобразууйте, в чём проблема?
C
1
struct ship *s = (struct ship *)malloc(sizeof(struct ship));
0
NoMasters
Псевдослучайный
1765 / 1107 / 74
Регистрация: 13.09.2011
Сообщений: 3,149
06.01.2012, 14:42 #4
Цитата Сообщение от somebody11 Посмотреть сообщение
маллок требует преобразования типов, и вот в этом загвоздка
Ничего подобного, компиляторы С(не плюсов) должны есть не подавившись. Более того, ручной каст возврата *alloc считается плохой практикой.
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
06.01.2012, 14:56 #5
Цитата Сообщение от NoMasters Посмотреть сообщение
Более того, ручной каст возврата *alloc считается плохой практикой.
Впервые слышу. А причины?
0
somebody11
14 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 29
06.01.2012, 15:17  [ТС] #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так преобразууйте, в чём проблема?
C
1
struct ship *s = (struct ship *)malloc(sizeof(struct ship));
да уже сообразила сама, просто никогда со структурами не возилась, спасибо
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.01.2012, 15:21 #7
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так преобразууйте, в чём проблема?
Если я не ошибаюсь, то в Си возможно и
C
1
struct ship *s = malloc(sizeof(struct ship));
В С++ необходимо явное преобразование.
0
NoMasters
Псевдослучайный
1765 / 1107 / 74
Регистрация: 13.09.2011
Сообщений: 3,149
06.01.2012, 15:23 #8
Цитата Сообщение от silent_1991 Посмотреть сообщение
Впервые слышу. А причины?
Точно не помню, это было K&R, что-то про глупые ошибки при работе с типами, когда подобный каст маскирует ошибки.
1
silent_1991
06.01.2012, 15:32
  #9

Не по теме:

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

0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
07.01.2012, 10:41 #10
Цитата Сообщение от NoMasters Посмотреть сообщение
Точно не помню, это было K&R, что-то про глупые ошибки при работе с типами, когда подобный каст маскирует ошибки.
да не, там наоборот - можно не приводить, но для ясности кода можно привести
(и много где приводится, в пункте про hashtable, например)
0
07.01.2012, 10:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2012, 10:41
Привет! Вот еще темы с ответами:

Динамически выделить память под массив - C++
Добрый день форусчани Как можно выделить память под массив объекта класса class Save_Colection { public: pk *field; ...

Динамически выделить память под массив - C++
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный элемент главной и побочной диагоналей с...

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

Выделить и удалить память под 4 мерный массив - C++
пацаны помогите.. Добавлено через 1 час 11 минут .помогите..не могу вобще натйи 4 мерные масивы..только 2хмерные


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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