Chinaunix首页 | 论坛 | 博客
  • 博客访问: 60728
  • 博文数量: 20
  • 博客积分: 1031
  • 博客等级: 少尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-11 14:22
文章分类

全部博文(20)

文章存档

2011年(2)

2010年(4)

2009年(14)

我的朋友

分类:

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;
}

阅读(898) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~