realloc会重新分配内存空间,为什么我无论怎么改都没有变化
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *iInt;
char *cChar;
iInt=(int*)malloc(sizeof(int));
printf("整型数据内存是:%d\n",sizeof(*iInt));
cChar=realloc(iInt,sizeof(char));
printf("字符数据内存是:%d\n",sizeof(*cChar));
printf("整型数据内存是:%d\n",sizeof(*iInt));
return 0;
}
输出是
整型数据内存是:4
字符数据内存是:1
整型数据内存是:4
然后代码修改成两种
1.把上面的cChar=realloc(iInt,sizeof(char));改为cChar=realloc(iInt,5*sizeof(char));
输出还是
整型数据内存是:4
字符数据内存是:1
整型数据内存是:4
2.把char *cChar;改为int *cChar;
输出为
整型数据内存是:4
字符数据内存是:4
整型数据内存是:4
为什么修改分配内存空间大小,它大小不变?而修改接收内存空间的指针的数据类型,输出显示内存空间改变?
iInt指向的内存空间再重新分配后不应该被释放了吗,为什么还能输出,且和之前一样?
sizeof 不能获取指针指向的内存大小
sizeof 计算的是指针大小 编译器不变就都是一样的 32位 4字节 64位8字节
sizeof (*指针) 计算的是数据类型的大小 ,sizeof是编译时计算
不适用于计算 malloc 或 realloc 分配的内存
如果有用麻烦点个采纳谢谢
针对第一个问题:无论怎么修改,都没有得到预期的结果,而且修改分配内存空间大小时输出始终未变,但是修改内存空间的指针数据类型时却看到了变化,请问是为什么呢?
出现这个问题的原因可能有以下几种情况:
1.内存分配失败,realloc返回值为NULL,但是程序继续使用了之前指针所指的空间,导致出错。
2.修改内存大小之后,指向这段内存空间的指针需要重新赋值,否则由于指针未更改,程序继续使用了之前指针所指的空间,导致出错。
针对第二个问题:我重新分配iInt指向的内存空间后,它不应该被释放掉了吗?为什么还能继续输出,并且和之前的结果一样呢?
当使用realloc函数时,它会根据分配的情况有两种可能:
1.如分配的内存空间大小比原来的小,则realloc函数在原指针所指空间后面的数据都会丢失,并且释放多余的空间。
2.如果新的内存空间比原来的大,则realloc会在新分配的内存后追加数据。旧数据可能不会释放,除非你自己释放这些空间。
综上所述,可能是因为使用realloc函数时,分配的内存空间并没有比原来的小,而是在之前的空间后追加了新的空间。所以才会出现没有被释放掉的情况。需要手动释放之前分配的空间。