博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《从缺陷中学习C/C++》——6.5 变量的作用域
阅读量:7057 次
发布时间:2019-06-28

本文共 924 字,大约阅读时间需要 3 分钟。

本节书摘来自异步社区出版社《从缺陷中学习C/C++》一书中的第6章,第6.5节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。

6.5 变量的作用域

从缺陷中学习C/C++

代码示例

char *str = NULL;    if(!str) {        char * str = (char*) malloc (100);        if(!str) {            return -1;        }        str[0] = 'a';    }printf("%c\n", str[0]);

现象&结果

程序执行时出现coredump。

Bug分析

程序出现coredump的原因是代码printf("%cn",str[0])中使用的str是空指针。程序首行定义了指针str,并且赋值为NULL。然后在if(!str){}语句块中,通过代码行char str = (char) malloc (100),重新定义了str指针,并且为str指针分配了内存空间。根据变量的作用域规则,char str = (char) malloc (100) 这行代码定义的局部变量str,有效范围是在if(!str){}语句块中。代码最后部分printf("%cn",str[0]) ,在if(!str){}语句块范围之外,此处使用的str不是在if(!str){}语句块中经过malloc分配过内存的指针str,而是程序首行定义的char *str = NULL;此时str为NULL,所以访问str[0]出现coredump

正确代码

char *str = NULL;    if(!str) {        str = (char*) malloc (100);        if(!str) {            return -1;        }        str[0] = 'a';    }printf("%c\n", str[0]);

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

你可能感兴趣的文章
Ant_的最完整build.xml解释
查看>>
ubuntu 恢复模式修改文件提示readouly
查看>>
关于蘑菇街的TeamTalk分析
查看>>
golang将byte的int转换
查看>>
一些 timeit 数据
查看>>
第5课 skymvc的session及cookie的使用
查看>>
数据库连接池
查看>>
SGU题目列表(按照AC人数排序)
查看>>
Navicat Report Viewer 设置 HTTP 的方法
查看>>
Android中流行的第三方库资源收集
查看>>
与局域网共享有关的服务
查看>>
SQL优化
查看>>
Linux僵尸网络Mayhem通过Shellshock漏洞传播
查看>>
js 获取radio按钮值的实例
查看>>
dwr 3.0 配置 + 不同参数,不同返回值调用方法 示例
查看>>
C语言要掌握的几个库
查看>>
如何在Android手机中开发QQ账户登陆功能的应用
查看>>
程序猿平时都要积累什么?
查看>>
uiautomator2 使用Python测试 Android应用
查看>>
Dalvik虚拟机工作原理介绍
查看>>