再回首(三):野指针产生原因及解决方案
来源:互联网 发布:不稳定排序算法有哪些 编辑:程序博客网 时间:2024/05/21 00:52
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//野指针产生问题分析//指针变量和它所指内存空间变量是两个不同的概念//解决野指针的方案//1定义指针时 把指针变量赋值成null//2 释放内存时,先判断指针变量是否为null //3 释放内存完毕后,把指针变量重新赋值成null//void wild_pointertest(){char *p = NULL;p = (char *)malloc(100); //char p[100];strcpy(p, "abcdefg");if (p != NULL){free(p);p = NULL;}if (p != NULL){free(p);}system("pause");}char *getMem2(int count){char *tmp = NULL;tmp = (char *)malloc(count * sizeof(char)); //char tmp[100];return tmp;}//实参和形参是两个不同的概念void getMem3(int count, char *p){char *tmp = NULL;tmp = (char *)malloc(count * sizeof(char)); //char tmp[100];p = tmp; //在这个场景下,你给形参赋值了,没有给实参赋值 //直接修改实参没戏。。。。。。。 实参和形参是两个不同的概念//return tmp;}void getMem4(int count, char **p /*out*/){char *tmp = NULL;tmp = (char *)malloc(count * sizeof(char)); //char tmp[100];//p = tmp; //在这个场景下,你给形参赋值了,没有给实参赋值 //直接修改实参没戏。。。。。。。 实参和形参是两个不同的概念//间接的修改实参*p = tmp;//return tmp;}//函数调用的时候,这个场景修改不实参int FreeMem2(char *p){if (p == NULL){return -1;}if (p != NULL){free(p);p = NULL; //想把实参给改掉,你能修改吗? 修改不了实参。。。。。}return 0;}int FreeMem3(char **p){if (*p == NULL){return -1;}if (*p != NULL){free(*p);*p = NULL; //想把实参给改掉,二级指针可以修改一级指针的值。。。。。}return 0;}void main(){//wild_pointertest();//一个函数中创建和释放内存,没有实参和形参的传递 一般注意不会产生野指针char *myp = NULL;/*myp = getMem2(100);getMem3(100, myp);*///没有真正的改变传入的实参getMem4(100, &myp);//传入二级指针用来改变一级指针的值 可以真正的改变实参值strcpy(myp,"bbbbb");//做业务操作//此 50000/*FreeMem2(myp);FreeMem2(myp);*///没有真正的释放实参 FreeMem3(&myp);FreeMem3(&myp);system("pause");}
0 0
- 再回首(三):野指针产生原因及解决方案
- 野指针产生原因及解决办法
- 野指针产生原因及解决办法
- 野指针产生原因及解决办法
- C语言野指针的产生原因及避免办法
- 产生野指针的原因
- leaked window产生的原因及解决方案
- JSP数据库Tomcat 产生乱码解决方案总结及原因(转三)
- 指针再回首
- C语言产生野指针的原因
- 使用QWT产生error LNK2001的原因及解决方案
- JSP中文乱码的产生原因及解决方案
- 行内元素产生水平空隙的原因及解决方案
- java.io.InvalidClassException异常产生原因及解决方案
- java.lang.NoClassDefFoundError错误产生的原因及解决方案
- 回首指针
- 野指针产生的原因和避免方法
- LNK2005 产生原因及解决方法
- Device Tree(一):背景介绍
- JS TAB面板延时机制
- LINUX 进程调度学习
- Tomcat 自启动环境参数的设置及 Linux 脚本的启动顺序
- ASP.NET 4.0尚未在 Web 服务器上注册 解决方法
- 再回首(三):野指针产生原因及解决方案
- 欢迎使用CSDN-markdown编辑器
- UVA - 297 Quadtrees
- iOS 中的 NSTimer
- URAL 1136 Parliament
- Device Tree(二):基本概念
- 在myEclipse上,基于jetty的android服务端环境配置
- 一、break和return在多层for循环中的作用
- 双链表的操作java版本