C语言中的Segment fault问题


![](img /images/20140315.jpg)

什么是Segment fault?

a segmentation fault (often shortened to segfault) or access violation is a fault raised by hardware with memory protection, notifying an operating system (OS) about a memory access violation; on x86 computers this is a form of general protection fault.

以上为Wikipedia对段错误的解释。用通俗易懂的话来说就是访问越界,访问了不存在或者受操作系统保护的内存,通常都是由于数组越界或者指针引起。

产生段错误的原因

  1. dereferencing NULL
  2. dereferencing an uninitialized pointer
  3. deferencing a pointer that has been freed/out of scope
  4. writing off the end of an array
  5. recursive function that uses all of the stack space
Read more ⟶

2014西安归途随笔


从1月20号到现在已有20多天了,说长不长,说短不短。回家的这段日子里很惬意,每天睡觉睡到自然醒,吃就更不用说了,无论在哪都不及家里吃的放心舒心,至于住么,家里自然比学校宿舍舒服多了。唯一美中不足的就是缺乏学习的氛围,不管多闲,都没心思整理开题报告,学习便更不用说了。一开始将其归结于家里没网,不过仔细琢磨下还是学习的气氛不够,导致自己变得懒惰。幸好在家呆的时间不是很长,不然真的要懒得无以复加。

本来回去之前便已将回程票买好了,买的2.16的,从武昌走。原计划是提前去武汉玩两天再走,毕竟武汉哥们好几个,随意蹭个吃住不成问题。哪知导师开始催(其实也谈不上催,就QQ上发了一个他专署的?而已,顿时感觉情况不妙,赶紧问问教研室的同学,没想到同级的都去了好几个,而且老师前几天给他们说了句:研究生应该过完初十就来的,这。。。不敢久留,立马抢了张12号的票),便匆匆踏上了回西安的旅途。

Read more ⟶

vim插件之surround.vim


Surround.vim插件简介

[Surround.vim] 1 是一款关于括号、引号和xml标签匹配的插件,可以成对的添加、修改和删除。当然也可以自定义匹配项。下面就常用的功能分别对标记的添加、修改和删除一一介绍。

添加

如现有一文本Hello,wolrd。光标处在文本中,然后输入ysiw",文本变成:

"Hello,world"

yss则将光标所在的当前行全部添加标签。如yss)则将当前行用()包围。

Read more ⟶

回首2013,展望2014


回首过去这一年,无论从技术还是思维上,都有很大的提升,但要我数萝卜下窖似的列举出来,我还真的列不出。只清楚地记得以下几件大事:

  1. 将博客从CSDN迁移到Octopress上。之所以迁移到Octopress上,是因为Octopress基于Jekyll,而Jekyll采用Ruby语言实现,恰巧我又迷上了Ruby。另一个原因是Octopress采用Markdown语法实现,排版更方便,简单的几个符号便能搞定,而且更美观。自从用了Markdown语法排版后,腰不酸了,腿不疼了。剩余的时间则可投入写作,何乐而不为呢?最大的好处是易迁移,只不过现在暂时还没有切身的体会,想想罢了,毕竟托管到GitHub上对于目前阶段已经够用,不必花钱买VPS,但不排除以后有钱了弄个VPS折腾下。那时候迁移也方便,所有的博客都是通过Jekyll引擎将markdown格式的文本转换为静态的Html文档,简单的拷贝下便可以了,而且还可以很方便的进行备份。其实与他人协作共同管理博客也是轻而易举的事了,只不过目前没这必要。
Read more ⟶

Tmux常用操作总结


以前也写过一篇关于tmux的文章,大概对tmux从简介、安装到操作已有简单的介绍,但由于是刚使用tmux时所写,总感觉操作部分写的不是很好,不够全面,所以便出现了此篇,算是填补前一篇的不足吧。

前边的操作前缀是Ctrl+b组合键,这两个键相隔甚远,操作起来太别扭,后来便在~/.tmux.conf配置文件中更改成Ctrl+a前缀了。具体配置见GitHub上我的tmux配置

Tmux常用操作

####1. 新建Session

$tmux new -s sessionname

####2. 杀死指定Session

Read more ⟶

拆机过程中的一些收获


昨天吃完午饭后来到教研室,突然师妹说有个远程(其实只是充分利用教研室的旧机器,在上面发布一些教研室的web项目,还有做为版本控制器的服务器)机器现在不能远程了,尝试关机不得所以强关,然后重启便无法启动,而她的数据在上面。所以我便开始了肢解之路。

由于几乎没有拆台式机的经验,所以拆机过程花费时间比较长,尤其是机箱外盖的拆卸。毕竟是旧机器,没有什么拆机教程可供参考,所以只能摸索着前进了,最后还是使用了点暴力手段才卸下的。拆开后,首先看了下是不是由于接口松动导致无法开机(其实连我自己都不相信是接口松动导致,因为强关不可能导致接口松动吧,可能是为了自我安慰才想到是接口松动的缘故),查看了一番,便很快排除这个原因。突然想强关的后果很可能就是导致硬盘坏掉,但是起码也应该进入BIOS吧。便猜想是不是电源坏掉导致的原因,老师刚好这时候也出来了,看到我在拆着机,便问我什么情况,我便跟老师一五一十地把情况汇报了一番。然后老师便去隔壁(其实是老师所在部门的办公室)找了一台不能用的机器,我拿过来之后卸下电源重新换上去,当然其中还有不少接线的问题还摸索了一阵,最后才发现电源存在的作用:

Read more ⟶

放慢脚步回首过去一个月


自上篇文章到现在差不多快一个月了,也因各种琐碎的事情没有闲下来构思一篇博文,顿时有一丝的罪恶感。吃完晚饭洗完澡坐在电脑前突然有种茫然的感觉,上了会儿高端大气的知乎浏览了几个帖子,本想着改下代码,结果发现也打不起精神,便趁此机会来码字来寻求心灵片刻的安宁吧。

首先,说说最近的劳动吧,虽然没啥成果。最近教研室事不多,刚好师姐有个同学需要找人帮忙改个项目,便答应帮忙(当然是有酬劳的,不然也不会闲到改.net的代码,虽然目前还没有谈具体的数字)。其实也不在乎都多少,答应干此活也只是为了积累经验而已,方便日后找工作,同时也算是练手。拿到代码后,我顿时有种欲哭无泪的感觉,代码逻辑及结构之混乱超乎我想象,可以总结为以下几点:

Read more ⟶

Welcome to Jekyll!


Thriller Comedy Horror
Read more ⟶

Vim寄存器


谈Vim寄存器前先对昨天做个总结吧。Rails Girls昨天在西安的ThoughtWorks成功举办,目的是帮女性程序员了解Ruby & Rails,报名参加的学员大概有30多人,教练大致有10来个,由于活动是ThoughtWorks和西安的Rubyists一起合作举办,所以我作为西安Rubyists的一员报名当了教练(由于教练奇缺,而我们Rubyist成员大多都去北京参加RubyConf了,所以我作为Rubyists里面的菜鸟报名当教练了,去了发现除我外,其他教练都是TW员工,顿时汗颜)。

Read more ⟶

Hadoop集群


最近开始研究起Hadoop,《Hadoop in Action》大概看了3章,然后开始着手搭建环境。

由于设备的受限,让老师给分了两台虚拟机(4G内存,20G硬盘,CentOS6.4),在上面开始搭建Hadoop集群,其中一台作为master,另一台作为slave。环境的搭建大概花了一天多的时间,主要有JDK的配置和SSH的配置,这两项已经是轻车熟路,所以很快便配置好。但是Hadoop才刚接触,所以配置起来速度慢点,没有一个绝对的参考资料,网上资料虽颇丰,但甄别对与错却需要一定时间,并且还要弄懂配置参数的意义。前后大致花了有半天时间。配置好后启动服务时却出错,google搜索了好久,也试过很多方法,但一直没解决。

Read more ⟶