系统在程序运行之前会在内存中先给程序画出一个冲租空间
这个空间有些来存放代码的有些来存放运行时的变量,还有些....
这空判拦个空间有一个区间使用来存放运行时的变量什么的
段错误 就是 程序运行时,变量访问越界斗胡一类的问题...
可能出现的原因是:
数组下标越界
动态分配内存的指针被double free了(释放两次了)
调试一些短小的程序的时候,一般会用printf等输出一些有用信息,以粗略的定位Bug的位置!作为学习C语言甚至刚稿森接触计算机开始,就认识的printf函数,可能我们已经非常的熟悉其使用了,虽然对其底层格式化输出的原理知之甚少,对整个执行流程似懂非懂。
不知道你是否曾经遇到过printf失灵的情况,即本应该打印数据,却没有任何输出信息?这个时候你可能首先怀疑,printf之前的程序除了问题,可能出现了死锁,或者死循环等:
但是如果我们把这个程序,稍加修改呢?
你会发现,依然没有任何输出!
(必须是Linux 环境,win中是有输出的,两者的实现不同,我们主要考虑Linux环境)
你可能从来没听过,printf输出,居然还有条件,这是在《C prime Plus 第五版》中学习到的,当时的我也同样惊讶。直到前不久,同窗的学妹同样表示了惊讶,所以我决定分享这个小知识,printf在满足以下三个条件之一时,会将缓冲区中的数据输出:
或
或
其中1、3情况,是我们在绝大多数时候会使用的,因此在绝大部分情况下,你都不会察觉到printf的“异常”。铅毁
1KB,可以自己写程序验证
虽然是很简单的小知识,但是有时候真的非常有用,比如在调试linux内核时,使用的printk同样遵循了这个规则,在内核中程序是不会终止的,这个时候就必须要加上换行符,否则就会看不到输出,哈哈,如果忘了加,可能就需槐敬备要重新编译内核!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)