/** * Windows 7 32位,CodeBlocks */ #include <stdio.h> #include <stdlib.h> int main() { char *p, *p2; int n, n2; p = malloc(100); printf("%p\n", p); p2 = realloc(p, 100000); n = 60; // 1 n2 = 110; // 1 p[n] = '1'; p2[n2] = '2'; printf("%p\n", p); printf("%p\n", p2); printf("%c\n", p[n]); printf("%c\n", p2[n2]); return 0; } /* 这个程序运行是不报错的,但将n1,n2 都改为1运行时出错 */
小结:
void * realloc ( void * ptr, size_t size );
用例:p2 = realloc(p1, size);
1. p1 = NULL
等价于 p2 = malloc(size)
2. size = 0
等价于 free(ptr)
3. size 小于之前的大小
p2,p1 都指向之前的位置
4. size 大于之前的大小
则会出现2种情况:①在之前的空间末尾追加;②找另一块空间分配
情况①:p1,p2 都指向同一个位置,即 realloc 之前 p1 的指向的位置
情况②:p1 指向的位置不变,但之前的内存已经释放了,这个时候的 p1 成为了野指针,这个时候就要注意了;p2 则指向了新分配的空间
【参考资料】