`
fujinbing
  • 浏览: 238878 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

野指针

阅读更多

野指针
  “野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:
  一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
  二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。例:
  char *p = (char *) malloc(100);
  strcpy(p, “hello”);
  free(p); // p 所指的内存被释放,但是p所指的地址仍然不变
  if(p != NULL) // 没有起到防错作用
  strcpy(p, “world”); // 出错 (这里出错是隐含性的,若刚才指向的地址((char *) malloc(100))被保存了别的数据,那么,这是p就修改了这个值,造成程序混乱,意想不到的错误)
  另外一个要注意的问题:不要返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放。



1.new delete 是运算符,malloc,free是函数

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc /free。

因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

2.new delete在实现上其实调用了malloc,free函数。

3.new operator除了分配内存,还要调用构造函数。

malloc函数只是负责分配内存。
另外注意,由于malloc和new都是在堆上分配的空间,无法自动释放,需要调用free/delete释放空间。malloc分配的空间用free释放,而new分配的空间用delete释放。

分享到:
评论

相关推荐

    C野指针处理

    ### C野指针处理 #### 一、野指针的概念 野指针,是指向不可用内存区域的指针。这种指针的操作可能导致程序发生不可预知的错误,例如程序崩溃、数据损坏等严重后果。 #### 二、野指针与NULL指针的区别 野指针...

    NULL指针、零指针、野指针定义及区别

    ### NULL指针、零指针、野指针定义及区别 #### 一、空指针、NULL指针、零指针 ##### 1.1 什么是空指针常量 在计算机编程中,特别是C/C++语言中,空指针常量是指一系列表示“无指向”或“未指向任何有效地址”的值...

    什么是内存泄漏以及什么是野指针2009.doc

    内存泄漏和野指针是C/C++编程中两个常见的错误,理解它们可以帮助程序员编写更高效、更稳定的程序。 **内存泄漏** 内存泄漏是指程序在动态分配内存后,未能正确地释放不再使用的内存区域。当一个内存块被分配但...

    野指针问题

    ### 野指针问题详解 #### 一、引言 在C/C++编程语言中,指针是非常重要的数据类型之一,它可以实现灵活的数据操作和内存管理。然而,不当的指针使用也会导致程序中的错误,其中最常见的就是野指针问题。本文将详细...

    [经验分享] 关于野指针

    ### 野指针的意义与应用 #### 一、引言 在C语言中,指针是一种重要的数据类型,它能够存储内存地址,并通过该地址访问内存中的数据。然而,在使用指针的过程中,很容易遇到一种特殊情况——野指针。野指针是指向不...

    第32课 - 野指针和内存操作分析.rar

    在C语言编程中,野指针和内存操作是两个非常重要的概念,特别是在处理程序的运行时行为和资源管理时。野指针是指未初始化或已失效的指针,而内存操作则涵盖了动态内存分配、释放以及对内存块的读写等操作。本课程将...

    c语言杜绝野指针.docx

    杜绝野指针.docx杜绝野指针.docx

    82.野指针.pdf

    82.野指针

    C程序中可怕的野指针图文详解

    C程序中可怕的野指针图文详解 本文主要介绍了C程序中可怕的野指针的相关知识点,通过实例代码和详细的解释,帮助读者了解野指针的危险性和避免方法。 一、疑问点:指针是C语言一个很强大的功能,同时也是很容易让...

    c++野指针的原理以及避免方法

    C++ 野指针的原理以及避免方法 C++ 野指针是指向非法的内存地址的指针,也称为悬挂指针(Dangling Pointer),是无法正常使用的指针。在 C++ 编程中,野指针是常见的错误之一,它们可以导致程序崩溃、内存泄露、...

    DoWalle#algo#12-野指针及非法内存操作1

    一、指向没有访问权限的内存 二、指向释放掉的内存 三、规避野指针

    C语言之free函数以及野指针介绍

    如果尝试访问或再次释放已经释放的内存,就会导致未定义的行为,这通常被称为“悬空指针”或“野指针”。 野指针是指那些不再指向有效内存地址的指针。在释放内存后,如果不将指针设置为`NULL`,那么该指针就成为野...

    软件编程低级错误:野指针

    C和C++语言是我司的主流编程语言,然而C/C++具有很多强大的语言特性,从而导致C/C++非常复杂,使得代码更容易出现BUG、难以阅读和维护。

    2小时精通C++智能指针

    智能指针可以解决普通指针存在的悬垂指针、野指针、资源泄露等问题本教程的主要的演示平台为Qt 4.11和g++ 7.4。学员也可以使用Visual Studio 2017。教程中从最简单的例子入手,覆盖智能指针的常用技术点,并穿插实例...

    C语言指针完全指南:5步彻底理解内存管理与野指针陷阱.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。...

    C语言指针完全指南:从内存原理到实战应用,告别野指针困扰.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。...

    C语言指针完全指南:内存原理+野指针避坑+20个经典案例.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。...

    野指针和悬空指针有多危险?用3个真实案例讲透动态内存管理.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。...

Global site tag (gtag.js) - Google Analytics