【时时三省】(C语言基础)经典笔试题3
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
题目
这段代码有什么问题?
缺少free
改正:
题目2
这段代码有什么问题
过程
首先调用Test函数,然后malloc开辟了100个字节的空间,然后str是指向这块空间,然后hello拷贝到了str里面去,然后释放了这块空间,下面是如果str不等于空指针的话就使用他,free这个函数是不会让str变成空指针的,所以走到这里的时候str确实不是空指针,然后就运行了if,进来以后把world拷贝放在了str,但是因为free已经释放了,所以属于非法访问,不能运行
注意:ferr以后已经后面要加一个str=NULL
C/C++程序内存分配的几个区域:
1.栈区( stack ):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
2.堆区( heap ):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收分配方式类似于链表。
3 .数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。
4 .代码段:存放函数体(类成员函数和全局函数)的二进制代码。