Смотрите этот пример!
int main( int argc, char ** argv ) { int *ptr = malloc(100 * sizeof (int)); printf("sizeof(array) is %d bytes\n", sizeof(ptr)); }
Функция printf возвращает только 4 байта! Что не так?
Большое спасибо !!!
Нет ничего плохого. Вы запрашиваете и получаете размер указателя на вашей платформе.
Как правило, невозможно получить размер блока памяти, на который указывает указатель, вы должны запомнить его самостоятельно, если он понадобится вам позже.
На некоторых платформах есть функция msize, которая возвращает размер области, выделенной malloc / calloc / strdup. Но это не стандартно.
Нет ничего плохого, это размер любого указателя на 32-битной платформе.
Вы не можете распечатать размер полученного вами блока памяти. Либо malloc выделяет всю запрошенную вами память, либо нет (и возвращает NULL).
malloc
NULL
Оператор sizeof() делает то, что вы запрашиваете: он сообщает вам размер указателя - и сам указатель занимает 4 байта в памяти.
sizeof()