现在的位置: 首页 > 综合 > 正文

realloc() 小结

2013年03月09日 ⁄ 综合 ⁄ 共 618字 ⁄ 字号 评论关闭
/**
 * 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 则指向了新分配的空间

【参考资料】

http://baike.baidu.com/view/736230.htm

抱歉!评论已关闭.