Вопрос № 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 (статус: Студент)
Ответ отправлен: 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