不理解为什么调用一级指针作函数参数时候,就不…
2018-06-18 03:54:11来源:未知 阅读 ()
产生野指针原因的本质:指针变量和它所指内存空间变量是两个不同的概念。
解决办法:三步曲
1、定义指针时,把指针变量赋值成NULL
2、释放内存时,先判断指针变量是否为NULL
3、释放完内存后,把指针变量重新复制成NUL
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//你上面分配内存,总得给释放掉 二级指针法
int getMem_free(char **myp1)
{
char *tmp1 = NULL;
if (myp1==NULL)
{
return -1;
}
tmp1 = *myp1;
free(tmp1);//释放完指针变量 所致的内存空间
tmp1 = NULL;//把实参改成NULL
return 0;
}
//一级指针法
int getMem_free0(char *myp1)
{
if (myp1 == NULL)
{
return -1;
}
free(myp1);//释放完指针变量 所致的内存空间
//不明白这里点
//myp1 = NULL;//???
return 0;
}
int main0801()
{
int ret = 0;
char *p1 = NULL;
int len1 = 0;
char *p2 = NULL;
int len2 = 0;
ret = getMem(&p1,&len1,&p2,&len2);
printf("p1:%s\n",p1);
printf("len1:%d\n", len1);
printf("p2:%s\n", p2);
printf("len2:%d\n", len2);
//getMem_free(&p1);//释放内存
//getMem_free(&p2);
getMem_free0(p1);//在被调用函数中,把p1所指向的内存给释放掉,但是实参p1不能被修改成NULL, 有野指针情况发生
getMem_free0(p2);
//发现就是因为上面 myp1 = NULL; 导致p1和p2产生野指针 打印就会出现乱码,不是很懂这里意思
printf("p1:%s\n", p1);
printf("len1:%d\n", len1);
printf("p2:%s\n", p2);
printf("len2:%d\n", len2);
system("pause");
return 0;
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C语言中的循环语句练习
下一篇:C语言中函数可变参数解析
- C++ 默认参数 2020-04-21
- 定位new表达式与显式调用析构函数 2020-04-20
- STL之<string> 2020-04-05
- opencv调用nu-book/zxing-cpp识别二维码 2020-03-26
- eight(待考究) 2020-02-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash