zoukankan      html  css  js  c++  java
  • 21 野指针

    分析下列程序,输出结果:不确定,未定义行为。

    #include<iostream>
    #include<stdlib.h>
    #include<string.h>
    using namespace std;
    void test(void) {
    	char *str=(char *)malloc(100);
    	strcpy(str,"hello");
    	free(str);
    	if(str!=NULL) {
    		strcpy(str,"world");
    	}
    	printf(str);
    }
    
    int main()
    {
    	test();
    	return 0;
    }
    

          指针释放存储空间后没有置为NULL,变成野指针。

    分析:野指针,不能通过简单的NULL进行判断,delete或free只是释放了指针所指向的内存区域,并没有干掉指针本身,所以指针指向的是“垃圾”指针,所以free或者delete之后要把指针置为NULL。

        free(str)只是释放了str指针所指向的内存区域,并未修改指针本身的地址值,所以str!=NULL,但是str是一个野指针(野指针 指向一个已删除的对象或未申请访问受限内存区域的指针),访问内存区域是受限的。不过,本人在mac和linux平台上运行上述代码,虽然有警告,但是最终都输出了world。

      

        释放以后按照理论是不能访问的,如果这个时候访问并且往里面输入数据的话系统不能保证数据安全,会有可能会出现world 但不代表一直会出现world。

    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    Oracle简介
    Python 新建程序
    HTML 标记 3 —— CSS
    Dreamweaver 2
    Dreamweaver 1 网页制作
    has-a关系——多重私有继承
    has-a关系——包含对象成员的类
    《使用wxWidgets进行跨平台程序开发》chap02——一个简单的应用程序
    抽象基类(ABC),纯虚函数
    普通类继承
  • 原文地址:https://www.cnblogs.com/dd2hm/p/7270795.html
Copyright © 2011-2022 走看看