野指针
- 野指针:未被初始化的指针,野指针所导致的错误和迷途指针非常相似,但野指针的问题更容易被发现。
空指针
- 空指针:就是一个被赋值为0的指针,它不指向任何的对象或者函数。
1、使用指针的第一件事就是需要看这个指针是否是空指针(坚决不能使用空指针,否则程序就会蹦。意思就是:为一个指针赋值为空指针是不会报错的:char*p;但是在使用的时候一定要判断是否为空指针(即该指针有没有指向),不为空才能操作)
判断空指针的方法:if(p!=nullptr){};//nullptr是空指针的意思//若明确指针该指针有指向,则不需要做判断,若不知道,则要做判断
2、一个指针不是空指针和野指针就是正常指针。
3、string *namevec;//假定此时是空指针,this->namevec=another;//此时跟another指向同一个内存
4、string *namevec;//假定此时是空指针,another=this->namevec;//此时跟namevec指向了空指针
5、图中打问号的地方内存是否一定存在呢?name是一个容器
答:如图,在c++中,容器没有new,只能是在栈上
又如图:new出来的新内存指向情况
6、eg:char *p;//在使用指针的时候都要分配内存么?
答:不是说使用指针的时候都要分配内存,而是使用指针的时候真正一定要有指向。只能说只有在有指向的时候使用,没有指向的时候千万不能使用。指针其实很简单,只要知道指向了哪?就没有问题了。
7、在使用指针的时候一定要画内存,画内存也就是让你知道指针到底指向的是哪里,到底是不是你想指的方向。
8、指针使用的几个原则:
第一:无法确定是否是空指针前一定要判断
第二:哪个(也就是类)申请的,哪个释放,同时释放的时候需要指向nullptr,否则就是野指针
第三:后面衍生出一种叫智能指针的(不用释放,自动释放)
第四:指针申请了内存一定要释放,哪个申请哪个释放