分类:
2010-08-06 09:29:35
挺简单的一个函数,不过还是让我摸到了一些门道 ^_^
记录下来,作备忘;
先看一个例子吧: (其实要说的在例子的注释里都说了 :))
// 从这个例子看, realloc 的两个指针其实是相同的;
//
// 原来q=realloc(p, *) 的作用是把p赋给q;
// 从下面的例子来看, 上面的说法不对?!
// 分两个两种情况:
// 一、
// p=malloc(100);
// q=realloc(p,2560);
// 二、
// p=malloc(100);
// q=realloc(p,256000000);
//
// 第二种情况下, 给q分配的内存空间太大, 导致必须从新分配一块内存块给q, 所以必须发放q的地址;
// 第一种情况, 给q分配的空间比较小, 因此只需要在原地址上扩充空间即可, 因此不需要改变q的地址;
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int main(void)
{
//char *p, *q; // 这种情况下, p、q为野指针(?), 这会造成没有为p malloc空间的情况下, realloc() 的段错误;
char *p=NULL, *q;
p=malloc(100);
if(p)
printf("Memory Allocated at: %p\n",p);
getchar(); // 等待按键输入
q=realloc(p,256000000);
if(q)
printf("Memory Reallocated at: %p\n",q);
if(p)
printf("Memory Reallocated at: %p\n",p);
free(q);
getchar(); // 等待按键输入
return 0;
}