`

使用指针常出现的错误

阅读更多

                                                     

              使用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;

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

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

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics