Linux下的一个c程序,程序一遇到printf就出现段错误

Linux下的一个c程序,程序一遇到printf就出现段错误,第1张

程序运行在内存中

系统在程序运行之前会在内存中先给程序画出一个冲租空间

这个空间有些来存放代码的有些来存放运行时的变量,还有些....

这空判拦个空间有一个区间使用来存放运行时的变量什么的

段错误 就是 程序运行时,变量访问越界斗胡一类的问题...

可能出现的原因是:

数组下标越界

动态分配内存的指针被double free了(释放两次了)

调试一些短小的程序的时候,一般会用printf等输出一些有用信息,以粗略的定位Bug的位置!作为学习C语言甚至刚稿森接触计算机开始,就认识的printf函数,可能我们已经非常的熟悉其使用了,虽然对其底层格式化输出的原理知之甚少,对整个执行流程似懂非懂。

不知道你是否曾经遇到过printf失灵的情况,即本应该打印数据,却没有任何输出信息?这个时候你可能首先怀疑,printf之前的程序除了问题,可能出现了死锁,或者死循环等:

但是如果我们把这个程序,稍加修改呢?

你会发现,依然没有任何输出!

(必须是Linux 环境,win中是有输出的,两者的实现不同,我们主要考虑Linux环境)

你可能从来没听过,printf输出,居然还有条件,这是在《C prime Plus 第五版》中学习到的,当时的我也同样惊讶。直到前不久,同窗的学妹同样表示了惊讶,所以我决定分享这个小知识,printf在满足以下三个条件之一时,会将缓冲区中的数据输出:

其中1、3情况,是我们在绝大多数时候会使用的,因此在绝大部分情况下,你都不会察觉到printf的“异常”。铅毁

1KB,可以自己写程序验证

虽然是很简单的小知识,但是有时候真的非常有用,比如在调试linux内核时,使用的printk同样遵循了这个规则,在内核中程序是不会终止的,这个时候就必须要加上换行符,否则就会看不到输出,哈哈,如果忘了加,可能就需槐敬备要重新编译内核!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12561918.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存