c语言seg的作用,C编程:seg fault,printf和相关的怪癖

正如许多年轻程序员所做的那样,我学会了在代码中的不同点插入"here1","here2"等多个打印到控制台语句的有用性,以确定我的程序何时出错.在我的CS研究中,这种强力调试技术为我节省了很多次.但是,当我开始用C编程时,我偶然发现了一个有趣的问题.如果我试着跑

void* test;

printf("hello world");

test[5] = 234;

当然,我为testChar而没有malloc'ing内存的段错误.但是,你会在逻辑上认为的"Hello World"将在赛格故障发生之前打印的,因为这是代码的流程,但以我的经验,它始终是赛格故障首先发生的情况,以及"世界你好"根本没有打印到控制台.(我没能测试这个确切的例子,但我遇到了这种使用在Linux中gcc的情况很多次了.)我猜这有两种编译器重新安排一些事情和/或printf的做使用某种异步刷新的缓冲区,因此不是立即的.这完全是我的猜测,因为我老实说不知道为什么会这样.在我使用的任何其他语言中,无论"testChar = ..."行引起什么问题,"hello world"仍会被打印,因此我可以确定问题所在.

我的问题是为什么在我编程C时会发生这种情况?为什么不首先打印你好世界?其次,有没有比这更好的C编程调试技术完成相同的基本操作?如何,一个简单/直观的方法来找到有问题的代码行?

编辑:我偶然给了一个工作的例子哈哈.我现在拥有的应该是一个段错误.有趣的是,通常当我不想要一个段落错误时,我得到一个,现在当我真正想要一个我编写法律代码时!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值