Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1536628
  • 博文数量: 596
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 173
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 15:50
个人简介

在线笔记

文章分类

全部博文(596)

文章存档

2016年(1)

2015年(104)

2014年(228)

2013年(226)

2012年(26)

2011年(11)

分类: C/C++

2013-03-17 20:45:46


  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <stdlib.h>

  5. void get_memory_fail(char *local_p)
  6. {
  7.     /*
  8.      * (gdb) p local_p
  9.      * $11 = 0x0
  10.      * (gdb) p &p
  11.      * $12 = (char **) 0xbffff30c
  12.      *
  13.      * (gdb) p local_p
  14.      * $14 = 0x0
  15.      * (gdb) p &local_p
  16.      * $15 = (char **) 0xbffff2f0
  17.      *
  18.      * 1)可以看出,local_p = p = 0x0,也就是两个的值是一样的
  19.      * 2)但是二者地址不一样,分配内存的时候,local_p指向新的内存,p丝毫没变
  20.      * 这也就所用这个方法拿不到内存的根本原因
  21.      */
  22.     local_p = (char*)malloc(100);
  23. }

  24. void get_memory_ok(char **local_p)
  25. {
  26.     /*
  27.      * (gdb) p p
  28.      * $1 = 0x0
  29.      * (gdb) p &p
  30.      * $2 = (char **) 0xbffff30c
  31.      * (gdb) s
  32.      *
  33.      * (gdb) p local_p
  34.      * $3 = (char **) 0xbffff30c
  35.      * (gdb) p &local_p
  36.      * $4 = (char ***) 0xbffff2f0
  37.      * (gdb) p *local_p
  38.      * $5 = 0x804b070
  39.      *
         *1)p和local_p所占用的地址不一样
         *2)local_p指向p的地址,也就是0xbffff30c
         *3)*local_p指向p的值,于是通过*local_p就可以改变p的值
         */
        *local_p = (char*)malloc(100);
    }


    char *get_memory_ok2(void)
    {
        /*
         * local_p的值为(char*)malloc(100)所在的内存
         * p = get_memory_ok2();p的值得到local_p的值
         *
         */
        char *local_p = NULL;
        local_p = (char*)malloc(100);
        return local_p;
    }


    int main()
    {
        char *p = NULL;
        get_memory_fail(p);


        get_memory_ok(&p);
        free(p);
        p = NULL;


        p = get_memory_ok2();
        free(p);
        p = NULL;


        return 0;
    }



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