Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Определение кол-ва выделенной памяти Си\С++

307
15 декабря 2008 года
Artem_3A
863 / / 11.04.2008
Допустим есть указатель, этот указатель указывает на память выделенную для символов(извиняюсь что коряво, лень было формулировать), как можно узнать на сколько символов выделено памяти? Ее размер? (Си\С++)
3.7K
15 декабря 2008 года
0nni
326 / / 24.06.2008
Зависит от указателя... в паскаля, например, есть два способа выделить память, в одном из которых выделяется реально запрашиваемое количество байт, а в другом - на 4 больше. Эти 4 байта находятся перед указателем на выделенную область и содержат ее длину, уверен, в си есть что то подобное.
1
16 декабря 2008 года
kot_
7.3K / / 20.01.2000
Цитата: 0nni
Зависит от указателя... в паскаля, например, есть два способа выделить память, в одном из которых выделяется реально запрашиваемое количество байт, а в другом - на 4 больше. Эти 4 байта находятся перед указателем на выделенную область и содержат ее длину, уверен, в си есть что то подобное.


мммм? С - это однако не паскаль. :) И причем здесь - зависит от указателя?

2Artem_3A по указателю никак. Можно получить размер элемента и умножить его на количество элементов - предварительно посчитав их.
Если же речь идет о символьном массиве - то используйте strlen

842
16 декабря 2008 года
sigmov
301 / / 16.09.2008
Цитата: Artem_3A
Допустим есть указатель, этот указатель указывает на память выделенную для символов(извиняюсь что коряво, лень было формулировать), как можно узнать на сколько символов выделено памяти? Ее размер? (Си\С++)


Никак. Нужно знать тип данных на которые указывает указатель.
Допустим.

 
Код:
struct point{int x,y;};
int x=3;
int y=4;
void* px = &x;
point *pp=px;
cout<<pp->x<<" "<<pp->y<<endl;

Result:
3 4;
А если убрать y
Result:
3 306999435;
Тип того.

Поэтому указатель занимает 4 байта и содердит просто адрес байта. А какой тип данных и тем более, сколько данный тип занимает - он не знает.

Единственно, что если строка символов, то ее окончание - байт с символом ('\0')
Т.е. при выделении
char *p="abc";
В памяти выделяется 4 байта 'a' 'b' 'c' '\0'
3.7K
16 декабря 2008 года
0nni
326 / / 24.06.2008
Цитата: kot_
мммм? С - это однако не паскаль. :) И причем здесь - зависит от указателя?


Я имел в виду от одного из этих способов выделения. Даже если в си такого нет, можно сделать ручками. И конечно понятно, что просто по указателю нельзя понять "каким" он является.

307
16 декабря 2008 года
Artem_3A
863 / / 11.04.2008
Ясно, всем спасибо, собственно я и предполагал что это невозможно, но учитывая что я далеко не все знаю решил спросить! Еще раз всем спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог