当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

使用指针常出现的错误

发表于: 2014-04-22   作者:麦田的设计者   来源:转载   浏览:
摘要:                                                         &nb

                                                     

              使用c语言指针常出现的错误

1、内存泄露,当使用指针指向堆内存时,使用完后要free掉。否则,随着没有指针指向堆内存的逐渐累积,会造成系统崩溃。

2、使用空指针,首先要说明一下什么是空指针(和零指针不同,零指针表示指针变量的值为0,即地址为0)。如果p是一个指针变量则p=0;p=0L;p='0\';p=3-3;p=0*12,p=NULL(NULL在这里是宏定义)或者在c语言里有p=(void×)0,则称p为一个空指针。在编程里我们经常看见if(p&&其它表达式)的形式就是为了保证指针变量不为空,因为任何变量或者函数的地址都不可能为空。

3、使用了野指针,野指针不是指向NULL的指针,而是指向“垃圾”内存的指针。

 无意使用野指针的情况

《1》定义了一个指针变量却没有初始化(未被初始化是指针会随便乱指),指针变量被创建后要指向和法的内存p=NULL;p=(int ×)malloc(sizeof(int))p=“字符串”;

 《2》在使用了free关键字释放掉了堆内存后而没有对指向堆内存的指针变量p另外赋值,这时p会指向一个不可预知的地方。

例如

char × p;

p=(char *)malloc(100);

p="testing";

free(p);

strcry(p,“OK”);/*不可以,p指向未知*/

4\使用局部变量的地址作为返回值。

程序1#include<stdio.h>

char * strtest(char *p)

{

p[10]="working";

return p;

}

void main()

{

char *p,*q;

q=strtest(p);

puts(q);

 

}

运行出错

程序2#include<stdio.h>

char * strtest(char *p)

{

p="working";

return p;

}

void main()

{

char *p,*q;

q=strtest(p);

puts(q);

 

}

运行成功,输出working;

原因:程序一使用了局部变量作为返回值。

以上就是本人今天看书的心得

 

 

使用指针常出现的错误

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号