Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 519
от 09.09.2006, 15:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 374, Экспертов: 57
В номере:Вопросов: 1, Ответов: 4


Вопрос № 54249: создовая указатель int *p; p=new int[60]; и удаляя его через delete[] p; удаляем все 60 элементов типа int! Как можно мне узнать сколько элементов находится на указателе, или его размер?...

Вопрос № 54.249
создовая указатель int *p; p=new int[60]; и удаляя его через delete[] p; удаляем все 60 элементов типа int!
Как можно мне узнать сколько элементов находится на указателе, или его размер?
Отправлен: 04.09.2006, 11:25
Вопрос задал: DDMZ (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: dentist
Здравствуйте, DDMZ!

#include <stdio.h>
#include <malloc.h>

void main()
{
int * p;
p = new int[60];
printf("%d ", _msize(p) / sizeof(int));
delete [] p;
}
---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 3-ий класс)
Ответ отправлен: 04.09.2006, 11:35
Оценка за ответ: 5
Комментарий оценки:
т.е. заголовок для указателя хранится в общей куче? (смотрел исходник msize)
Я думал что можно как нить получить его разыминовывая и т.п... (видимо ошибался)

Отвечает: gitter
Здравствуйте, DDMZ!
int* p=new int[2345]
int len= _msize(p )/sizeof(p[0]);
//assert(len==2345)

Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 04.09.2006, 11:42

Отвечает: Хватов Сергей
Здравствуйте, DDMZ!

Именно так

new type[number] обслуживаете в основном вы. Система, компилятор, или кто либо еще в это не вмешивается. Они вам память выделили, default constructor-ы по new вызвали, а по delete[] вызовут деструктор-ы и освободят память - и это все.

Количество элементов вы должны отслеживать сами, а если требуются особые действия при удалении или создании - определяйте свой класс. В зависимости от того. чего вам надо либо поверх элементов (int) либо поверх указателя (int *)
Ответ отправил: Хватов Сергей (статус: 3-ий класс)
Ответ отправлен: 04.09.2006, 12:34

Отвечает: AlexKlaip
Здравствуйте, DDMZ!
Упрощенно, указатель это переменная, содержащая адрес памяти. Вопрос
сколько под ним элементов не корректен. Для приведенного примера, Вы
и так знаете что начиная с адреса, на который указывает указатель р 60 элементов, расположенных подряд. Размер указателя для Windows 32, 32 бита,
т.е. 4 байта.
Ответ отправил: AlexKlaip (статус: 1-ый класс)
Ответ отправлен: 04.09.2006, 13:29


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное