C语言进阶之路(三)----野指针的产生原因及解决办法

1.会产生野指针的做法

#include <stdio.h>  
  
//这就是一种错误的写法  
int main(){  
    int *p = NULL;  
    p = (int *)malloc(4);  
      
    //释放P所指向的内存空间,但指针变量p仍然留在栈中,成为了野指针  
    if (p != NULL){  
        free(p);  
    }  
      
    if (p != NULL){  
        free(p);  
    }  
    return 0;  
}  

 

2.正确的做法:

#include <stdio.h>//指针变量和指针所指向的内存变量是两个不同的概念  
//使用动态内存分为三步  
//1.定义时,将指针为定义NULL  
//2.释放内存时,把指针变量重新赋值或者NULL  
//3.释放内存后,把指针变量赋值为NULL  
int main02()  
{  
    int *p = NULL;  
    p = (int *)malloc(4);  
      
    //这才是正确的写法  
    if (p != NULL){  
        free(p);//释放P所指向的内存空间,但指针变量p仍然留在栈中,成为了野指针  
        p = NULL;//释放野指针  
    }  
  
    return 0;  
}  

 

 3.间接赋值是指针存在的最大意义

间接赋值的条件:
(1)定义实参(普通变量)和形参(指针变量)
(2)把实参的地址传给形参
(3)利用形参来修改实参的值

被调用函数分配的内存,结果传出来的两种方法
(1)return
(2)指针做函数参数

//这种方式是通过return将函数分配的内存传给被调用函数  
char *getBuf()  
{  
    char *p = NULL;  
    p = (char *)malloc(100);  
    strcpy(p, "zhanghanzhi");  
    return p;  
}  
//这种方式是通过指针作为函数参数间接赋值  
void getBuf(char *p)  
{  
    char tmp = NULL;  
    tmp = (char *)malloc(100);  
    strcpy(tmp, "zhanghanzhi");  
    p = tmp;  
}  
int main()  
{  
  //1.定义实参(普通变量)和形参(指针变量)  
  char *p;  
  
  //2.把实参的地址传给形参  
  //3.利用形参来修改实参的值  
  getBuf(p);  
  
  return 0;  
}  

4.几个本质

数据类型:数据类型的本质是固定大小内存的别名。对变量声明数据类型,是为了告诉编译器分配几个字节的内存。

变量:变量的本质是一段内存空间的别名。也就是给一段内存空间取一个新的名字,就是变量。

指针:指针也是一种数据类型,它的值是某一个内存空间的地址。指针的步长根据它指向的内存空间的数据类型而定。

*p在等号左边是对p所指向的内存空间赋值;*p放在等号的右边是对p所指向的内存空间取值。

数组中[]的本质:假如有数组array,则array[i]等价于*(array+i),是因为[]对于程序员来讲是友好的,但是编译器最终还是要将它理解为指针,也就是数组作为函数参数时的退化。array[i] ==> array[0+i] ==>*(array+i)

Unity天翼网盘是中国电信旗下的云存储服务平台,用户可以通过该平台上传、存储和共享各种文件。要下载Unity天翼网盘上的文件,首先需要登录自己的账号。在登录界面输入正确的用户名和密码后,点击登录按钮即可进入个人账号页面。 在个人账号页面上,用户可以浏览所有已经上传或共享给自己的文件。如果用户知道具体要下载的文件名,可以在搜索框中输入关键字进行搜索,或者直接查找文件夹中的文件。点击文件名或者文件夹名进入相应的页面后,用户可以看到文件的详细信息,包括文件大小、上传者、上传时间等等。 要下载文件,用户可以选择两种方式:一是点击文件名后的下载按钮,直接将文件保存到本地;二是点击文件名后的预览按钮,通过在线预览功能来浏览文件内容,然后选择下载按钮进行保存。不同文件类型的预览方式可能有所不同,例如图片可以直接在网页上显示,而文档类文件则可能需要使用相关的应用程序来进行预览。 在下载文件时,需要注意文件的大小和网络状况,以免下载过程中出现问题。如果遇到下载速度较慢或者无法下载的情况,可以尝试切换网络环境或者联系Unity天翼网盘的客服人员进行咨询或解决问题。 总之,Unity天翼网盘下载文件的步骤相对简单,只需要登录账号、浏览文件并选择下载方式即可完成。该平台为用户提供了方便易用的云存储服务,用户可以随时随地获取自己需要的文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值