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

时间:2017-02-15 08:35:42

标签: c realloc

我正在尝试使用此代码将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个字节。 我做错了什么?

1 个答案:

答案 0 :(得分:3)

sizeof(ptr)确定单个整数指针的大小。 sizeof是在翻译期间静态应用的运算符(可变长度数组除外,但此处并非如此)。静态类型ptrint*,因此您会打印sizeof(int*)

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

然而,好消息是,如果malloc / realloc返回除NULL之外的任何地址,那么确实ptr指向可包含10/20整数的内存。所以你只需要跟踪分配的大小。

但请注意,malloc及其亲属在程序运行期间进行内存分配,与sizeof相反(大多数情况下,VLA再次返回)在程序运行之前的结果。