C++学习之指针的常见错误
2014-03-22 15:59
197 查看
C++学习之指针的常见错误
我们在编程的过程中,有时候在使用指针的时候,删除一个指针以后一定要将这个指针设置为空指针,这是因为删除这个指针只是删除这个指针指向的地址,这个指针还真是的存在程序中,并且它仍然会指向原来的内存空间。这时候如果你忘记了这点而再次尝试使用这个指针的时候,那么将会导致程序出错。
这种错误非常难于调试,因为这种值得改变不太容易使人联想到时被删除的安格指针导致的错误,因此在删除一个指针以后,我们一定要将它赋值为空,虽然使用空指针的时候是违法的,容易使程序崩溃,但是,有时候我们宁愿让程序崩溃也不愿意调试这种难于觉察的错误。
这种隐藏的错误可以从下面这个例子中体现出来:
#include<iostream>
using namespace std;
int main()
{
int *p=new int;
*p=4;
cout<<"将4赋给p的地址以后,指针p读取的值:\t"<<*p<<endl;
delete p;
cout<<"删除P指向的空间以后,指针p读取的值为:\t\t"<<*p<<endl;
long *p1=new long;
cout<<'创建新空间以后,指针p1中保存的地址:\t"<<p1<<endl;
*p1=12423;
cout<<"指向新空间以后,指针P1中保存的地址为:"<<p1<<endl;
*p=23;
cout<<"将23赋给p的地址以后,指针p读取的值:\t"<<*p<<endl;
cout<<"将23赋给p的地址以后,指针p1读取的值:\t"<<*p1<<endl;
delete p1;
return 0;
}
运行这个程序,会发现指针p和p1读取的值都为23,由于编译器会默认将释放掉的内存空间回收然后分派给新开辟的空间,因此的10行新定义了指向新开辟的long型变量空间的指针p1以后,这个p1指针指向的空间实际上就是被释放的空间,也就是P原来指向的空间,这种错误非常之难调试,因为这种值的改变不容易令人联想到的是被删除的那个指针导致的错误,因此在删除一个指针以后,一定要将其赋值为空,虽然使用空指针是违法的,容易使程序奔崩溃,但是我们宁愿程序崩溃,也不愿意它调试起来很困难。
我们在编程的过程中,有时候在使用指针的时候,删除一个指针以后一定要将这个指针设置为空指针,这是因为删除这个指针只是删除这个指针指向的地址,这个指针还真是的存在程序中,并且它仍然会指向原来的内存空间。这时候如果你忘记了这点而再次尝试使用这个指针的时候,那么将会导致程序出错。
这种错误非常难于调试,因为这种值得改变不太容易使人联想到时被删除的安格指针导致的错误,因此在删除一个指针以后,我们一定要将它赋值为空,虽然使用空指针的时候是违法的,容易使程序崩溃,但是,有时候我们宁愿让程序崩溃也不愿意调试这种难于觉察的错误。
这种隐藏的错误可以从下面这个例子中体现出来:
#include<iostream>
using namespace std;
int main()
{
int *p=new int;
*p=4;
cout<<"将4赋给p的地址以后,指针p读取的值:\t"<<*p<<endl;
delete p;
cout<<"删除P指向的空间以后,指针p读取的值为:\t\t"<<*p<<endl;
long *p1=new long;
cout<<'创建新空间以后,指针p1中保存的地址:\t"<<p1<<endl;
*p1=12423;
cout<<"指向新空间以后,指针P1中保存的地址为:"<<p1<<endl;
*p=23;
cout<<"将23赋给p的地址以后,指针p读取的值:\t"<<*p<<endl;
cout<<"将23赋给p的地址以后,指针p1读取的值:\t"<<*p1<<endl;
delete p1;
return 0;
}
运行这个程序,会发现指针p和p1读取的值都为23,由于编译器会默认将释放掉的内存空间回收然后分派给新开辟的空间,因此的10行新定义了指向新开辟的long型变量空间的指针p1以后,这个p1指针指向的空间实际上就是被释放的空间,也就是P原来指向的空间,这种错误非常之难调试,因为这种值的改变不容易令人联想到的是被删除的那个指针导致的错误,因此在删除一个指针以后,一定要将其赋值为空,虽然使用空指针是违法的,容易使程序奔崩溃,但是我们宁愿程序崩溃,也不愿意它调试起来很困难。
相关文章推荐
- C++学习总结_指针常见错误
- C++学习之指针的常见错误
- c++指针常见错误
- c/c++指针常见错误
- C/C++常见指针错误 and 内存访问越界
- C++学习之动态内存管理常见三种错误
- C/C++指针错误与调试相关学习总结
- C++ 指针的常见错误
- 学习笔记之C/C++指针使用常见的坑
- 2014秋C++第5周项目1參考-见识刚開始学习的人常见错误
- C/C++之函数返回值为指针或者是引用时常见错误总结
- C++指针(一) 常见的错误
- C/C++常见指针错误
- c/c++中指针学习的两个绝好例子
- C++学习笔记10——指针
- 【C/C++学习】之十六、关于空指针NULL、野指针、通用指针
- 机器学习实践中应避免的七种常见错误
- ssh相关原理学习与常见错误总结
- [置顶] 【C/C++学习】之十一、指针一些事
- C++菜鸟常见错误整理(第二天)