Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Память для структуры, Выделяется ли? 
:(
    Опции темы
apook
Дата 1.8.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Если я пишу в функции main: struct opt *als = (opt*)malloc(sizeof(opt));

при этом структура opt находится в файле допустим struct.h, а заполняется
она из некой функции которая находится в файле struct.cpp, а запускается эта некая функция из функции main, То означает ли это что память будет 
выделена для этой структуры ведь я не знаю размер данных которые будут
внесены. И как в таком случае использовать new вместо malloc




--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
_hunter
Дата 1.8.2006, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



нихт не понял.
память будет выделена для той структуры, чей адрес указан перед =
и при чем тут размер вносимых данных?..
для перехода на new достаточно писать opt *als = new opt


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
apook
Дата 1.8.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Вопрос наверно лучше задать так:
Как лучше выделить память структуре которая находится в подключаемом файле
Код

и при чем тут размер вносимых данных?..

вносимых в структуру данных или я не правильно предствавляю принцип
Я выделяю определенный размер, а потом вношу туда кол-во данных соо
тветствующее выделенному размеру



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
_hunter
Дата 1.8.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



Цитата(apook @  1.8.2006,  17:48 Найти цитируемый пост)
Как лучше выделить память структуре которая находится в подключаемом файле

это вопрос еще страньше предыдущего... можеш выделять что malloc' ом что new...

Цитата(apook @  1.8.2006,  17:48 Найти цитируемый пост)
Я выделяю определенный размер, а потом вношу туда кол-во данных соответствующее выделенному размеру

можно вносить и меньше. главное чтобы не больше...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
apook
Дата 1.8.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Хорошо правильно ли я выделил память? Cомнения возникли когда в структуру под которую выделена память была включена еще структура причем происходит это в заголовочном файле


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Earnest
Дата 1.8.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Если компилятор не ругается на sizeof(XXX), значит, знает, что это такое - все OK.


--------------------
...
PM   Вверх
Mad
Дата 2.8.2006, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 7
Всего: 19



Цитата(apook @  1.8.2006,  14:53 Найти цитируемый пост)
при этом структура opt находится в файле допустим struct.h, а заполняется
она из некой функции которая находится в файле struct.cpp, а запускается эта некая функция из функции main, То означает ли это что память будет 
выделена для этой структуры ведь я не знаю размер данных которые будут
внесены. И как в таком случае использовать new вместо malloc

бред


--------------------
user posted image
PM MAIL   Вверх
apook
Дата 2.8.2006, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



В обшем так:

код основного файла
Код

#include "iostream.h"
#include "alloc.h"

#include "struct.h" //Включаю файл со структурой opt

int main()
{
struct opt *als = (opt*)malloc(sizeof(opt));

Funct(als); //функция находится в файле struct.cpp(ее описание в struct.h)

cout << als->a << " " << als->b << " " << als->x.c << " \n";

return 0;
     }

код файла struct.cpp
Код

#include "struct.h"

void Funct(struct opt* st)
{
st->a = 10;
st->b = 15;
st->x.c=25;
     }

код файла struct.h
Код

struct m
     {
      int c; 
          };

struct opt
     {
      int a;
      int b;
      struct m x;
          };

extern void Funct(struct opt* st);

Так работает. тогда как обстоят дела с памятью для struct m, неужели компилятор разберется если я пишу struct m* x, то компилится но не работает.  Можно написать так
Код

struct opt
     {
      int a;
      int b;
      struct m
           {
            int c; 
                } x;
          };

Тогда вроде struct m будет входить в память выделенную для struct opt. Хотелось бы разобраться, или я и впрямь брежу.


Это сообщение отредактировал(а) apook - 2.8.2006, 06:38


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Earnest
Дата 2.8.2006, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Надо писать так (без struct):
Код

struct opt
{
      int a;
      int b;
      m  x;
};

m - это новый тип, который ты ранее определил.
Во втором случае тоже правильно, только тогда тип m вложенный.


--------------------
...
PM   Вверх
GePo
Дата 3.8.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

Репутация: нет
Всего: 3



Цитата(apook @ 2.8.2006,  07:35)
неужели компилятор разберется если я пишу struct m* x, то компилится но не работает.

ясное дело не работает и правильно делает. struct m* x - это указатель на структуру. У переменной-указатель тоже есть размер занимаемой памяти и этот размер входит в структуру. А не работает, потому что указатель не проинициализирован, т.е. не выделена память под структуру, на которую он указывает.
А вообще-то, если возникают такие вопросы, то нужно взять книжку и еще раз проверить свои знания о языке.
--------------------
PM MAIL WWW   Вверх
apook
Дата 4.8.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Благодарю за совет. Было в лом копаться но я уж понял что это так 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.