《从缺陷中学习C/C++》——6.5 变量的作用域-阿里云开发者社区

开发者社区> 异步社区> 正文

《从缺陷中学习C/C++》——6.5 变量的作用域

简介:
+关注继续查看

本节书摘来自异步社区出版社《从缺陷中学习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]);

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python编程语言学习:利用locals函数判断某个变量参数之前是否已经被定义/存在/出现
Python编程语言学习:利用locals函数判断某个变量参数之前是否已经被定义/存在/出现
26 0
使用关键字创建具有局部作用域的JavaScript变量
使用关键字创建具有局部作用域的JavaScript变量
8 0
python3中global 和 nonlocal 的作用域
python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 。
993 0
C/C++中Static的作用详述
1.先来介绍它的第一条也是最重要的一条:隐藏当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
455 0
学习c#.net
为了和大众接轨,不至于死在vb.net的孤岛上,今天开始学习c#.net了。有点郁闷,也有点兴奋!
380 0
Linux c括号作用域【原创笔记】
大师指点后,所做的笔记,很感谢一起愿意研究技术的同事,以下不是本人原创,是他分析的成果#include #include struct lock_class_key { int ck; }; #define mutex_init() ...
708 0
JavaScript之作用域与变量
在javascript中声明变量时,我们经常使用的是 var 变量名=value; 例如: var =100; 可是你也许没有注意到这种声明变量的方式产生的变量是一个局部变量,而不是全局变量。
488 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载