Saturday, November 19, 2011

贝贝和蒲公英


蒲公英的英文单词是dandelion,很冷僻的一个词,以前从来没见过。

爸爸妈妈的照片



都是贝贝拍的,儿子是个好帮手啊。

Tuesday, November 15, 2011

double free is dangerous

Today, a double free of a pointer caused a crash in the program, which is hard to detect. One of my colleagues helped me pin down the problem and fixed it.

As we all know, if a block memory is allocated through malloc() or new(), we must remember to free() or delete() the pointer (pointing to the memory block allocated) later. And it is perfectly legal in C/C++ to free/delete a null pointer. So we usually don't bother to check whether the pointer is null before freeing it. And fewer programmers will set the pointer to null after the memory is freed.

Yet, this is a bad practice. Consider the following scenario:
---
char *p = (char *)malloc(1024);
... //some string operations involving p
free(p);
free(p);
---
Definitely, it will cause a core dump. Here is the reason: After the first free(), the memory pointed to by p is deallocated and reclaimed by the system. But p is not set to null yet. In this case, it is called a dangling pointer. What is points to is undetermined and unknown. When the second free() is run on the dangling pointer, the system is tring to free a block of memory not in use any more! The best result you can expect is a core dump.

The solution is simple. Just set the pointer to null after it is freed. Usually, we wrap it up in a macro.
---
#define SAFE_FREE(p)        if ((p) != NULL) do {free((p)); (p) = NULL;} while (0)
---
It is a common practice to wrap up multiple statements of a macro into a do {...} while (0) loop, with no terminating semicolon.This allows the macro to be used like a single statement in any location, such as the body of an if statement, while still allowing a semicolon to be placed after the macro invocation without creating a null statement.

References:
http://stackoverflow.com/questions/2468853/freeing-memory-twice
http://en.wikibooks.org/wiki/C_Programming/Common_practices

Monday, November 14, 2011

大楼前面

押犯人回来照相,犯人老大不高兴。

猴癞子

好像猴子还是不太乐意

猴子就是不配合,妈妈的。

在爸爸的工作间

正在玩MechQuest

张牙舞爪的猴子

带猴子在工作楼的一楼大厅照相

叫猴子骑上去,猴子不敢,唉。

猴子爱妈妈


爸爸爱猴子

怎么说也不敢骑上去,我们扶着也不行。

爸爸妈妈相亲相爱

Thursday, November 10, 2011

Torture

早上给猴子和猴妈打电话,问猴子想不想爸爸,猴妈说猴子不想,原因是“爸爸太爱我了,总是亲我,torture我”(猴子的原话),一笑。

真想这个可爱的猴子啊。在这以前,可以说没有一天跟我分开过。

下面这两张照片,是在从北卡到肯州的路上拍的,估计是在田纳西境内的某个加油站。



Saturday, November 5, 2011

童趣两则

1. 贝贝在玩笔记本电脑的时候,我过去把头靠着贝贝,问他:“贝贝,你离开爸爸,会难过吗?”,贝贝回答:“Easy过”,见我脸色迷惘,又补充说:“容易过”。

2. 给贝贝在YouTube上面找了一个U.S. Marine Corps的一次Combat Patrol的实拍录像,可是录像里面只见士兵们打枪,并没有见到他们的阿富汗对手。然后又见这些士兵们没完没了地说着什么,我和贝贝都没听明白,贝贝问他们为什么只talk不fight,我很赞同:“These sons of bitches should stop talking.” 猴子问:“What does bitch means?” 我回答:“female dog”,贝贝继续追问:“But there is no dog in the battle field.” 这下我彻底傻了。

昨晚可真不应该

为了一点小事向猴子发火,把猴子给骂哭了。猴子一开始还忍着,明明想哭,却强作无事,妈妈逗猴子说“你哭、你哭”的时候还强作笑脸。忘记是什么原因了,突然忍不住了,小嘴一咧,哭得好伤心。这点挺像我的。遇到伤心事,我小时候也会尽量忍住泪水,但到最后(经常是见到父母后)仍然会情不自禁地哭泣。

猴子一哭,弄得我心里也挺不痛快。还是要自我检讨一下,其实猴子也没做什么大的错事,就是我在与奶奶用skype聊天的时候,用脚在摇笔记本下面的桌子。当时我正好在和奶奶谈到工作的事情,猴子这么一搞,弄得我没控制住自己的情绪。以前比这大得多的事情我都能容忍,为什么这次不能?事后回想,还是把工作中的浮躁情绪带到家里了,并发泄到猴子身上了。实在是不应该,尤其是过几天猴子和猴妈就要离开猴爸了,疼还来不及,怎么能对孩子发火?尤其是因无关痛痒的事情,更是觉得自己无可理喻。

有的时候,真的很厌恶自己,觉得自己像是一坨屎。

Thursday, November 3, 2011

不知道为啥

在北卡的时候,虽然没有工作,但我心里一点也不痛苦(不知道是不是算没心没肺),感觉过得还是很快乐。快乐地带猴子、快乐地上网、快乐地读自己喜欢的书,过得很充实,从来也不会觉得无聊。虽然程锦偶尔发点脾气(因为我某件事做错了,老婆并不是不讲道理的人),也是过眼烟云,并不会放在心上很久。

但是不知为何,现在有工作了,却感到内心很软弱,也分不清楚是出于对工作的畏难情绪导致的,还是对即将离开的老婆孩子依依不舍,也许两者兼而有之吧。

人真是个奇怪的动物,有时候很坚强,另些时候又无比脆弱,真是矛盾的对立统一体。

喜欢读战争小说的我,对从战场上的老兵最珍惜家庭感到不解。总觉得经过了战争这个壮丽残酷的过程的人,怎么会对平淡的家庭生活那么感兴趣,那么看重?现在,我些许有点感悟。虽然我和一名战场上的老兵不可同日而语,但对于和亲人短暂的分别都感到难以忍受,就更不用说老兵了。士兵在战场上,每时每刻都有可能被流弹打死,对亲情的感觉就更为强烈,也必然更为珍惜。可能这也是电影Gladiator里面罗马皇帝Marcus Aurelius在大战结束之后问Maximus(Russel Crowe)想要什么样的奖赏,得到的回答却是“Home”。

陆游有句诗是这样的:“死去原知万事空,但悲不见九州同(下略)”。我的感想是:“死去原知万事空,但悲不见妻与子”。过于沉重了,其实也不到那个程度,只是感觉心里难受。

第二天上班,还是难受

不舒服的感觉很强烈。我在新加坡工作的时候还有免费Milo以及Nestle Coffee喝,到这里屁的饮料都没有,只有自来水,操!

工作方面,还在摸索code的过程中,还是有些艰难,可能是许久没有写code的缘故导致的,要努力啊。

下午雷哥给我打了个电话问我的情况,说着说着鼻子就有些发酸,又想哭了。想念朋友的关怀,害怕即将失去的的老婆孩子热炕头。

今天中午,我的Recruiter Marc带我去Aerotek补办一些手续,中途问我是否喜欢Lexington,为了不扫他的兴致,我违心地说喜欢。其实还是咱北卡的农村好啊,一点都不喜欢Lexington,虽然它是个城市。

Wednesday, November 2, 2011

今天是在Lexmark工作的第一天

这个公司外表感觉很光鲜,但是似乎里面很烂,工作环境很差,刚开始很多东西不懂,也不知道是不是在家闲了太久的缘故,反正脑袋感觉用得不太得劲。不过,感觉Lexmark的code结构很乱,不如Xerox的code架构简明清晰。

上班上到下午,想到今后要孤孤单单一个人在这鬼不生蛋的地方生活,不禁悲从中来,有点想哭的感觉。老婆真不容易,以前总是不能理解的,总以为自己在新加坡带猴子更为辛苦,其实还是孤独最可怕,程锦能独自熬过三年,不简单。

庄子曾经说过:“子非鱼,安知鱼之乐?”同样,只有在有相同经历的基础上,才能有相似的痛苦。

上班第一天,就有想撂挑子,和老婆孩子一起回家、离开这鬼地方的冲动。唉……