使用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;
原因:程序一使用了局部变量作为返回值。
以上就是本人今天看书的心得
相关推荐
介绍C语言中指针相关的概念及应用,针对初学者实现程序的常见错误
智能指针错误用法示例集合,目前整理了 6 种,虽然示例程序中很直观,但是实际使用的时候会以类似的情形出现,一定要提高警惕,不知道这些例子中有没有自己的影子呢?
在 C# 中很少需要使用指针,但仍有一些需要使用的情况。例如,在下列情况中使用允许采用指针的不安全上下文是正确的: 处理磁盘上的现有结构 涉及内部包含指针的结构的高级 COM 或平台调用方案 性能关键代码 不鼓励在...
数据流分析器 分析静态数据相关性 java实现,用于检测静态代码的相关性,单相关双相关
那么是错误的,因为编译器会返回一个无法将char* *[3]转换给char *的错误,b=a的赋值,实际上是把a的首地址赋给了b,由于b是一个指向指针的指针,程序的输出cout*b|"*(b+1)|"*(b+2); 结果是 abc cde fgh 可以看出每...
如果将作用域A的变量地址赋给在作用...当A中相应变量的生存周期结束后,会使B的指针出现“悬垂指针”的现象(悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。悬垂指针往往导致程序错误,而且很难检测出来。)
利用华生医生drwtsn32及VC自带的部分功能,定位空指针操作的错误行号
大多数开发者对指针的了解和理解有一定难度,我相信通过本文讲解后对你有所帮助!
绘图用到的图片要拷贝在src目录下,但通过代码引用时,出现空指针错误,错误修正及时处理,让你不再忧愁!
使用C语言指针的几个常见错误及纠正方法
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大 学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是...
浅析C语言指针使用中的几个常见错误.pdf
单链表操作中指针作为函数参数的典型错误.cpp
一种多敏感空指针引用错误的静态检测方法,白杨,王瑀屏,空指针引用错误是一种常见的、难以发现和避免的程序错误。针对该错误,结合传统静态分析方法和符号执行方法,提出一种过程内流敏
再再论指针, 关于指针较细的描述,能修正许多以前错误的看法
其实,我已经使用C++11两年多了,我无意中发现多种错误使用C++11智能指针的案例,这些错误会使程序效率很低或者直接崩溃。为了方便查找,我把它们按照下文进行了归类。 在开始之前,我们用一个简单的Aircraft...
详细分析了c的精髓,指针的各种用法和可能出现的错误。
本文档是适合于基础学习C语言指针到深入学习的c语言指针的总结性文档,本人能力有限,如错误之处,请告知我。
C语言指针教学中常见错误分析.pdf
指针的各种用法,以及错误的使用