我无法使用 c 中的 realloc 将内存重新分配给整数

i am unable to reallocate memory to integer using realloc in c

我正在尝试使用此代码将 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);
}

但是输出也显示了 realloc 之前和 realloc 之后的 8 个字节。 我做错了什么?

sizeof(ptr)决定了单个整型指针的大小。 sizeof 是在翻译过程中静态应用的运算符(可变长度数组除外,但这里不是这种情况)。 ptr 的静态类型是 int*,所以你得到 sizeof(int*) 打印出来。

sizeof(ptr) 永远不会是 sizeof(int[10]) 因为数组不是指针,尽管许多教程错误地教导它们是指针。

好消息是,如果 malloc/realloc return 任何非 NULL 的地址,您确实 ptr 指向可以包含的内存10/20 整数。所以你只需要跟踪分配的大小。

但是请注意,malloc 及其亲属在程序的 run-time 期间进行内存分配,这与 sizeof 相反(在大多数情况下,又是 VLA)return 是你的程序甚至 运行.

之前的结果