Я пытаюсь перераспределить 20 байт в целое число, что уже занимает 10 байт, используя этот код:я неспособен перераспределить память в целое, используя перераспределить в с
#include <stdio.h>
#include <stdlib.h>
void main()
{
int *ptr;
ptr=(int *)malloc(10*sizeof(int));
printf("size before re-allocation : %d bytes",sizeof(ptr));
ptr=(int *)realloc(ptr,20*sizeof(int));
printf("size after re-allocation : %d bytes",sizeof(ptr));
free(ptr);
}
но вывод показывает 8 байт до realloc и после realloc тоже. что я делаю неправильно?
Вы не можете программно проверить, сколько памяти выделено для чего-то в C, по крайней мере, нет никаких стандартных функций, которые могут это сделать. Вы (программист) должны отслеживать его и должны убедиться, что выделенная память была правильно освобождена, используя 'free' –
' sizeof' - это оператор ** компиляции-времени **. Вы не можете использовать его, чтобы получить ** часть информации ** (которая в вашем примере представляет собой размер выделенного блока памяти, возвращаемого 'malloc' и' realloc'). –
Кроме того, 1) 'void main()' → 'int main (void)' 2) Удалить броски из 'malloc' и' realloc' 3) Использовать '% zu' вместо'% d', потому что 'sizeof' возвращает' size_t', а не 'int' 4) Проверьте, были ли успешны' malloc' и 'realloc', посмотрев их возвращаемые значения. –