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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> malloc и sizeof 
V
    Опции темы
Kosya4ok
Дата 18.12.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем привет!

Код

#define 1280000
   int *line;

   line = (int *)malloc(sizeof(int)*(MAXLINE+1));
   cout << sizeof(int) << endl;                                  //sizeof(int) = 4
   cout << sizeof(int)*(MAXLINE+1) << endl;           //sizeof(char)*(MAXLINE+1) = 5120004 байт или блоков размером int?

Поправьте пожалуста если неправильно думаю. 
Получается следующее, я выделяю блок памяти размером 5120004 байт(или блоков?) и присваиваю адрес начала блока line?И получается я по блоку иду с шагом в sizeof(int)?

И такое. Если я вот выделяю память с помощью malloc и допустим забываю сколько я её выделил как то можно восставновить какое количество памяти было выделено?
Спс!
PM MAIL   Вверх
Daevaorn
Дата 18.12.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Kosya4ok @  18.12.2007,  19:06 Найти цитируемый пост)
Поправьте пожалуста если неправильно думаю. 

Немного не логично выглядит +1 в 
Цитата(Kosya4ok @  18.12.2007,  19:06 Найти цитируемый пост)
line = (int *)malloc(sizeof(int)*(MAXLINE+1));

Цитата(Kosya4ok @  18.12.2007,  19:06 Найти цитируемый пост)
я выделяю блок памяти размером 5120004 байт(или блоков?)

байтов
Цитата(Kosya4ok @  18.12.2007,  19:06 Найти цитируемый пост)
присваиваю адрес начала блока line?

точно
Цитата(Kosya4ok @  18.12.2007,  19:06 Найти цитируемый пост)
И получается я по блоку иду с шагом в sizeof(int)?

в коде не видно как ты "идешь".А вообще сам можешь выбрать шаг.
Цитата(Kosya4ok @  18.12.2007,  19:06 Найти цитируемый пост)
Если я вот выделяю память с помощью malloc и допустим забываю сколько я её выделил как то можно восставновить какое количество памяти было выделено?

никак. запоминай.
PM MAIL WWW   Вверх
Kosya4ok
Дата 18.12.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А разве вот такое (int *)malloc(sizeof(int)*(MAXLINE+1)) не говорит о том что я иду по этому куску памяти с шагом 4 байта?


Это сообщение отредактировал(а) Kosya4ok - 18.12.2007, 18:59
PM MAIL   Вверх
Daevaorn
Дата 18.12.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Kosya4ok @  18.12.2007,  19:27 Найти цитируемый пост)
А разве вот такое (int *)malloc(sizeof(int)*(MAXLINE+1)) не говорит о том что я иду по этому куску памяти с шагом 4 байта? 

смотря что ты понимаешь под шагом. на само деле, ты волен пользоваться памятью как угодно. но конечно, если оставить как есть, т.е. указатель на int, то при адресной арифметике с этим указаетлем действительно "шаг" будет sizeof(int)
PM MAIL WWW   Вверх
Earnest
Дата 18.12.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Правильно.
Шаг перемещения по буферу зависит от типа указателя. Сделай BYTE* и будешь ходить по байтам.

Цитата(Kosya4ok @  18.12.2007,  19:06 Найти цитируемый пост)
Если я вот выделяю память с помощью malloc и допустим забываю сколько я её выделил как то можно восставновить какое количество памяти было выделено?

В рамках стандарта языка и переносимо - нельзя.



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

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

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

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

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


 




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


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

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