我无法使用 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 是你的程序甚至 运行.
之前的结果
我正在尝试使用此代码将 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 是你的程序甚至 运行.