![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Если я пишу в функции main: struct opt *als = (opt*)malloc(sizeof(opt));
при этом структура opt находится в файле допустим struct.h, а заполняется она из некой функции которая находится в файле struct.cpp, а запускается эта некая функция из функции main, То означает ли это что память будет выделена для этой структуры ведь я не знаю размер данных которые будут внесены. И как в таком случае использовать new вместо malloc -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
нихт не понял.
память будет выделена для той структуры, чей адрес указан перед = и при чем тут размер вносимых данных?.. для перехода на new достаточно писать opt *als = new opt -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Вопрос наверно лучше задать так:
Как лучше выделить память структуре которая находится в подключаемом файле
вносимых в структуру данных или я не правильно предствавляю принцип Я выделяю определенный размер, а потом вношу туда кол-во данных соо тветствующее выделенному размеру -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| _hunter |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
это вопрос еще страньше предыдущего... можеш выделять что malloc' ом что new...
можно вносить и меньше. главное чтобы не больше... -------------------- Tempora mutantur, et nos mutamur in illis... |
||||
|
|||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Хорошо правильно ли я выделил память? Cомнения возникли когда в структуру под которую выделена память была включена еще структура причем происходит это в заголовочном файле
-------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Если компилятор не ругается на sizeof(XXX), значит, знает, что это такое - все OK.
-------------------- ... |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
бред |
|||
|
||||
| apook |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
В обшем так:
код основного файла
код файла struct.cpp
код файла struct.h
Так работает. тогда как обстоят дела с памятью для struct m, неужели компилятор разберется если я пишу struct m* x, то компилится но не работает. Можно написать так
Тогда вроде struct m будет входить в память выделенную для struct opt. Хотелось бы разобраться, или я и впрямь брежу. Это сообщение отредактировал(а) apook - 2.8.2006, 06:38 -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
||||||||
|
|||||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Надо писать так (без struct):
m - это новый тип, который ты ранее определил. Во втором случае тоже правильно, только тогда тип m вложенный. -------------------- ... |
|||
|
||||
| GePo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 30.3.2003 Где: Москва Репутация: нет Всего: 3 |
ясное дело не работает и правильно делает. struct m* x - это указатель на структуру. У переменной-указатель тоже есть размер занимаемой памяти и этот размер входит в структуру. А не работает, потому что указатель не проинициализирован, т.е. не выделена память под структуру, на которую он указывает. А вообще-то, если возникают такие вопросы, то нужно взять книжку и еще раз проверить свои знания о языке. --------------------
|
|||
|
||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Благодарю за совет. Было в лом копаться но я уж понял что это так
-------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |