苏嵌作业3.1
内存管理&预处理,结构体
question1:预处理的概念是什么?
answer:
question2:宏该如何使用?
answer:(1)无參宏定义
需要注意的是:后面的表达式的参数要用括号。
(2)带參宏定义:
注意事项:
question3:结构体如何使用?
answer:
结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。
question4:结构名和结构变量的区别?
answer:
question5:define和typedefine的区别?
answer:
question6:位域(位段)的概念及如何使用?
answer:
question7:每种内存分别存放什么类型的数据?
answer:
(1)bass段用来存放那些没有初始化和初始化为0的全局变量。
(2)data段用来存放那些初始化为非零的全局变量。
(3)rodata段用来存放常量数据。
(4)text(代码段)存放代码和部分整数常量,这个段是可以执行的。
(5)栈(stack)存放临时变量和函数参数。
(6)堆(heap)最灵活的一种内存,生命周期完全由使用者控制。
malloc:用来分配指定大小的内存。
realloc:用来调整/重新分配一块存在的内存。
free:用来释放不再使用的内存。
question8:常见的内存错误及对策?
answer:
(1)内存分配未成功,却使用了它
解决办法:在使用之前检查指针是否为NULL
(2)内存分配虽然成功,但是尚未初始化就使用它
解决办法:记住赋初值
(3)内存分配成功并且已经初始化,但操作越过了内存的边界
解决办法:while循环次数不能搞错
(4)忘记了释放内存,造成了内存泄漏
解决办法:用free释放
(5)释放了内存却继续使用它
question9:常见的段错误以及调试方法?
answer:访问了错误的内存段会产生段错误;
方法一:利用gdb逐步查找段错误
方法二:分析core文件
方法三:段错误时启动调试
方法四:利用backtrace和objdump进行分析
question10:指针与数组之间的对比?
answer:
区别一:数组在静态存储区或栈上创建,地址容量不能改变,只能改变内容;指针指向任意内存块,灵活多变
区别二:不能对数组名进行直接复制与比较,指针可以
区别三:sizeof可计算出数组的容量,指针的却不行