使用realloc出现的困惑

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 分配的内存

如果有用麻烦点个采纳谢谢

  • 以下回答由chatgpt基于相关博客总结生成:

    针对第一个问题:无论怎么修改,都没有得到预期的结果,而且修改分配内存空间大小时输出始终未变,但是修改内存空间的指针数据类型时却看到了变化,请问是为什么呢?

    出现这个问题的原因可能有以下几种情况:

    1.内存分配失败,realloc返回值为NULL,但是程序继续使用了之前指针所指的空间,导致出错。

    2.修改内存大小之后,指向这段内存空间的指针需要重新赋值,否则由于指针未更改,程序继续使用了之前指针所指的空间,导致出错。

    针对第二个问题:我重新分配iInt指向的内存空间后,它不应该被释放掉了吗?为什么还能继续输出,并且和之前的结果一样呢?

    当使用realloc函数时,它会根据分配的情况有两种可能:

    1.如分配的内存空间大小比原来的小,则realloc函数在原指针所指空间后面的数据都会丢失,并且释放多余的空间。

    2.如果新的内存空间比原来的大,则realloc会在新分配的内存后追加数据。旧数据可能不会释放,除非你自己释放这些空间。

    综上所述,可能是因为使用realloc函数时,分配的内存空间并没有比原来的小,而是在之前的空间后追加了新的空间。所以才会出现没有被释放掉的情况。需要手动释放之前分配的空间。