一、内存分析题
情况一:

解析:
1.p是一个局部变量,释放的时候没有把堆内存交付出去,会造成内存泄漏
2.str是一个空指针,会造成非法内存访问,出现段错误
情况二:

解析:
1.p是一个局部变量,返回一个局部变量的地址不安全
2.输出结果是未知的,无法得知该内存是否被其他进程使用
补充:
1.如果用字符串常量来初始化字符数组,那么编译器会把字符串常量区的内容拷贝一份给字符数组
2.一个指针指向常量区,那么指针的内容是不可以更改的,因为常量区的内容是不可更改的
情况三:

解析:
free函数在释放内存后,只是将内存的使用权还回给系统,但是,它并没有断开这块内存的连接,这里会造成非法内存访问,因为没有这块内存的使用权
所以,对于堆内存的释放,正确的方法:
if(str != NULL)
{
free(str);
str = NULL;
}
情况四:

解析:
该程序能输出结果,但是会造成内存泄漏
二、关于C语言关键字static和const的作用
static关键字可修饰变量和函数
静态局部变量 :static修饰局部变量会修改其变量的生命周期,直到程序退出,它才会被回收,但是,变量的作用域没有发生变化
静态全局变量:static 修饰全局变量会修饰其变量的作用域(仅对当前源文件可见),但是,不会改变他的生命周期
static 修饰函数,该函数只对当前源文件可见,所以,好处在于,可以在不 同源文件定义同的函数
const修饰的变量为只读变量,本来内存默认中可读可写,当编译器在编程程序时,发现const修饰这个变量,那么编译器就会把这个内存写的权限给关闭

573

被折叠的 条评论
为什么被折叠?



