Chinaunix首页 | 论坛 | 博客
  • 博客访问: 22792
  • 博文数量: 16
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-02 11:52
文章分类
文章存档

2011年(2)

2010年(10)

2009年(3)

2008年(1)

我的朋友

分类: C/C++

2008-12-08 12:38:55

#include <stdio.h>
#include <stdlib.h>
/*

   pointer tips:
   int *p; 此时p可能指向任何不确定的位置, 即指针悬空
   int *p = NULL; 此时p不会指向任何位置,即你不能通过p访问到数据
*/


int main()
{
    int *ptr1 = (int*)malloc(8 * sizeof(int));
    int *ptr2 = (int*)malloc(9 * sizeof(int));

    printf("%x %x\n", ptr1, ptr2); //打印两指针所指内存单元号

    printf("%d %d\n", *ptr1, *ptr2); //打印内存单元上数据,可能是任意值


    ptr1 = ptr2;
    printf("%x %x\n", ptr1, ptr2); //两者指向相同内存单元

    printf("%d %d\n", *ptr1, *ptr2);

    free(ptr1);

    /*释放的其实是原来ptr2所指内存单元,原来ptr1所指内存单元已经无法找到
    因事先没有保存,故不能释放该部分内存,导致悬挂指针*/

    free(ptr2); //再次释放ptr2指向的内存地址,可能引发严重错误

    return 0;

阅读(1090) | 评论(0) | 转发(0) |
0

上一篇:尾端与位段

下一篇:二维数组参数传递

给主人留下些什么吧!~~