C笔试题-DAY1

一、内存分析题

情况一:

 解析:

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修饰这个变量,那么编译器就会把这个内存写的权限给关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值