首页 > 对realloc函数实现的疑问

对realloc函数实现的疑问

int * p1 = (int *)malloc(100 * sizeof(int));
int * p2;
for(int i = 0;i < 100;i++)
    p1[i] = i;
p2 = (int *)realloc(p1,200 * sizeof(int));

打个不恰当的比方:假设内从严重不足,p1所在的原来的内存块不能足够容纳200个连续的空闲单元,那么系统就会重新申请一个足够200个单元的连续空间,并把之前100个值复制到新空间的地方,然后返回新空间的地址。

那么问题来了,我们传的是p1指针,指针是不带‘100’这个信息的,如何实现复制不多不少100个值呢?求解,谢谢!


free(p1)的时候如何知道去 释放100 * sizeof(int) 大小的内存呢? 可见这个 100 是存了的.

一个很朴素的做法是, 分配 101 * sizeof(int) 大小的内存*p, p[0] 放入 内存大小(100), p1 = &p[1]; return p1;.

【热门文章】
【热门文章】