C++指针篇常见的错误

指针常见的错误

1 内存泄漏c++

形成内存泄漏的几种状况:程序员

①经过c语言的malloc系统函数以及c++的new运算符动态内配的内存空间,使用完以后程序员没有手动释放! ②在有异常处理的程序中,即时使用了free或者delete可是因为异常的缘由没有获得执行编程

/* 这里提供一段伪代码 */
try{
  type* pointer = malloc(sizeof(type));
  //此处抛出异常
  free(pointer);  //这里不会执行
}catch(...){
  //捕捉到异常
}
复制代码

2 野指针的使用bash

基本概念:野指针指的是指向"垃圾"内存的指针函数

指针变成野指针的状况概述:ui

①free或者delete以后的指针,free和delete只是释放了该指针指向的内存空间,"可是该指针的值仍是malloc或者new分配的内存的地址",继续使用它去访问这个内存地址是会发生错误的!spa

注意:当释放掉动态内存空间以后,将先前指向它的指针的值设置为NULL;在建立指针变量的时候,给指针一个初始值,由于不指定初始值的话,指针的值是随机的,这有时候会致使不可预期的错误!指针

建议:定义指针变量的时候尽可能初始化,哪怕初始化为NULL也好;这是一个很好的编程习惯!code

②将局部变量的地址返回生命周期

出现的问题:由于a是局部变量,只有在func函数做用域中有效,它的内存空间是属于栈内存的,一旦func执行完以后,系统会自动回收它的内存空间,因此再次使用的话会发生错误!

解决方法:将局部变量使用static修饰,由于在c++中,static修饰的变量的生命周期是整个程序运行期间,与程序"同生共死";

int* func(){
  int a = 8;
  return &a;
}

int main(){
  int* p = func();
  cout<<"p:"<<*p<<"\n";

}
复制代码

3 NULL指针

出现NULL指针的状况

①使用malloc或者new动态分配内存的时候:

对于malloc和new来讲,当内存分配失败的时候回返回NULL,因此若是不作判断的话就会发生错误;

②当使用指针做为函数的参数的时候:

对于含有指针参数的函数来讲,当使用者传入一个NULL的指针的话也是会发生错误的;

注意:为了不以上两种状况的发生,咱们再程序中加一个if判断

if (pointer == NULL)
  中止执行任务
复制代码
相关文章
相关标签/搜索