Как я возвращаю размер указателя, который я выделил с помощью malloc? - PullRequest
2 голосов
/ 19 марта 2010

Смотрите этот пример!



int main( int argc, char ** argv )
{
    int *ptr = malloc(100 * sizeof (int));

    printf("sizeof(array) is %d bytes\n", sizeof(ptr));
}

Функция printf возвращает только 4 байта! Что не так?

Большое спасибо !!!

Ответы [ 4 ]

8 голосов
/ 19 марта 2010

Нет ничего плохого. Вы запрашиваете и получаете размер указателя на вашей платформе.

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

2 голосов
/ 19 марта 2010

На некоторых платформах есть функция msize, которая возвращает размер области, выделенной malloc / calloc / strdup. Но это не стандартно.

1 голос
/ 19 марта 2010

Нет ничего плохого, это размер любого указателя на 32-битной платформе.

1 голос
/ 19 марта 2010

Вы не можете распечатать размер полученного вами блока памяти. Либо malloc выделяет всю запрошенную вами память, либо нет (и возвращает NULL).

Оператор sizeof() делает то, что вы запрашиваете: он сообщает вам размер указателя - и сам указатель занимает 4 байта в памяти.

...