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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
somebody11
14 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 29
06.01.2012, 13:00     Как правильно выделить память под структуру? #1
имеются структуры
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));
маллок требует преобразования типов, и вот в этом загвоздка
может, можно использовать другие функции выделения памяти?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
06.01.2012, 13:02     Как правильно выделить память под структуру? #2
Цитата Сообщение от somebody11 Посмотреть сообщение
может, можно использовать другие функции выделения памяти?
На С не знаю, но на с++ так можно:
new/delete
C++
1
2
3
ship* s = new ship;
//...
delete s;
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.01.2012, 13:11     Как правильно выделить память под структуру? #3
Цитата Сообщение от somebody11 Посмотреть сообщение
маллок требует преобразования типов
Так преобразууйте, в чём проблема?
C
1
struct ship *s = (struct ship *)malloc(sizeof(struct ship));
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
06.01.2012, 14:42     Как правильно выделить память под структуру? #4
Цитата Сообщение от somebody11 Посмотреть сообщение
маллок требует преобразования типов, и вот в этом загвоздка
Ничего подобного, компиляторы С(не плюсов) должны есть не подавившись. Более того, ручной каст возврата *alloc считается плохой практикой.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.01.2012, 14:56     Как правильно выделить память под структуру? #5
Цитата Сообщение от NoMasters Посмотреть сообщение
Более того, ручной каст возврата *alloc считается плохой практикой.
Впервые слышу. А причины?
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));
да уже сообразила сама, просто никогда со структурами не возилась, спасибо
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.01.2012, 15:21     Как правильно выделить память под структуру? #7
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так преобразууйте, в чём проблема?
Если я не ошибаюсь, то в Си возможно и
C
1
struct ship *s = malloc(sizeof(struct ship));
В С++ необходимо явное преобразование.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
06.01.2012, 15:23     Как правильно выделить память под структуру? #8
Цитата Сообщение от silent_1991 Посмотреть сообщение
Впервые слышу. А причины?
Точно не помню, это было K&R, что-то про глупые ошибки при работе с типами, когда подобный каст маскирует ошибки.
silent_1991
06.01.2012, 15:32
  #9

Не по теме:

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

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

C++ Выделить память под массив размера 2^64 байтов
Как правильно выделить память под двумерный массив в шаблоне? C++
C++ Как выделить память под динамические переменные при создании класса?

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.01.2012, 10:41     Как правильно выделить память под структуру? #10
Цитата Сообщение от NoMasters Посмотреть сообщение
Точно не помню, это было K&R, что-то про глупые ошибки при работе с типами, когда подобный каст маскирует ошибки.
да не, там наоборот - можно не приводить, но для ясности кода можно привести
(и много где приводится, в пункте про hashtable, например)
Yandex
Объявления
07.01.2012, 10:41     Как правильно выделить память под структуру?
Ответ Создать тему
Опции темы

Текущее время: 12:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru