如何在C++中动态分配二维数组

这个问题应该是我在CSDN蹭分时回答次数比较多的一个问题了,我的回答一般是三种方法:(1)用vector的vector,(2)先分配一个指针数组,然后让里面每一个指针再指向一个数组,这个做法的好处是访问数组元素时比较直观,可以用a[x][y]这样的写法,缺点是它相当于C#中的一个锯齿数组,内存空间不连续。(3)直接分配一个x*y大小的一维数组,这样保证空间是连续的,但访问数组元素不直观。对于我这个“经典”回答,我那时还一直是挺得意的,至少从蹭分的角度来看,这样回答还是很有效的。

今天在ChinaUnix论坛闲逛时看到一个贴子,再次证明了我在C++方面才疏学浅。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void **darray_new(int row, int col, int size)
{
void **arr;
arr = (void **) malloc(sizeof(void *) * row + size * row * col);
if (arr != NULL)
{
void *head;
head = (void *) arr + sizeof(void *) * row;
memset(arr, 0, sizeof(void *) * row + size * row * col);
while (row--)
arr[row] = head + size * row * col;
}
return arr;
}
void darray_free(void **arr)
{
if (arr != NULL)
free(arr);
}

嗯,连续分配内存,而且可以用a[x][y]的方式来访问!可谓二维数组动态分配的绝妙方法!这段程序是C的,似乎要改成支持对象分配的C++版也不是什么难事(不过估计得用上placement new吧,嗯,需要再思考一下……)。

电影与配乐

难得看看电视,看到了CCTV音乐频道正在放Ennio Morricone专题,今天是介绍《海上钢琴师》的配乐。海上钢琴师的配乐应该说是已经被介绍得有点泛滥了,但我还是又一次重温了这些优美的音乐,并写下这些音乐感言。

《音乐之声》也许是我一次关注电影音乐,当然这个片子还是比较特殊的,毕竟它的主题就是音乐,所以不太可以把它的音乐称为是“配”乐。不过有次 跟对音乐没有特别感觉的母亲一起看这部情节简单而时间巨长的电影的时候,她居然一点也没有犯困,可见当这些轻松活泼的音乐与情节完美的融为一体时,还是很 有魅力的。

《勇敢的心》中的悠扬的苏格兰风笛的声音、《黄河绝恋》中略带凄凉的小提琴的声音和《美丽人生》的音乐主题也许是最先触动我的一些电影配乐。在欣赏电影的时候,当音乐响起的时候,心中会有一种特别的感觉,有时感受到的是激动,有时是温馨,有时是紧张,有时是惆怅……

有时候我自己真的有点搞不清楚我是因为喜欢电影才喜欢这些音乐,还是因为喜欢这些音乐才喜欢电影。也许大部分的时候,是因为喜欢电影才喜欢音 乐。像肖申克的救赎,属于我不敢存在硬盘上的电影,因为一旦不小心点开了,可能就要忍不住再看一遍,所以用OST取代电影,毕竟听音乐不像看电影那样只是 “单线程”去完成的。当工作的时候,放放OST,就像是看了一遍电影,不同的音乐,记录着不同的故事和画面。当一段温馨的音乐响起的时候,我会不自觉的微 笑;当一段波澜壮阔的音乐响起的时候,我的心情也会跟着起伏,甚至会流出眼泪。

很多古典乐迷常常会说:“这个曲子让我很感动,不止一次的让我落泪”。我以前总是很难理解,音乐真的有这么大的魅力吗?通过电影配乐,让我很容 易的理解到了这一点,乐迷们所谓的听懂了音乐、对音乐的理解,不是正像电影配乐所带我们的感受一样吗?他们所听到的音乐,其实是音乐与画面、音乐与故事、 音乐与心情的结合。这些东西是需要自己从音乐中去理解,自己去为音乐配上画面和情节才能获得的。而电影配乐则能通过电影本身的画面、情节让我们更容易的理 解到音乐所蕴含的意义。我听了这么多年的古典,却很少被打动,原因就是没有用心去体会,只是停留在音乐的旋律这个肤浅的层面,这样其实收获真是很少的。通 过理解电影配乐,也帮助了我重新去认识更多的音乐的价值。

说到Ennio Morricone,他的确是电影配乐大师,在我知道这个名字之前,我就已经喜欢上了他的一些作品,它们是美国往事、天堂电影院和海上钢琴师。我看电影不 多,对音乐有深刻印象的更少,在没有刻意寻找的前提下就能一下子“偶遇”他的三部作品,实在是对他的功力敬佩无比。Morricone的音乐,风格多样, 题材广泛,但总是与电影的情节是如此的丝丝入扣。海上钢琴师中对不同人物用不同的音乐来描写以及描写爱情的那段Playing Love就足以表现他对钢琴的驾驭能力。而在美国往事中,他则采用的更为多样的音乐形式来表达情感,表现童年的排萧吹出的主题加上产生的各种变奏,配合到 不同的情节中,达到一致而又个性鲜明效果。弦乐和人声创造出温暖舒缓的情节,而变化丰富的管乐和电子乐则创造出激情或冲动。不同的音乐,配合有张有驰的情 节安排和丰富的故事,才让这部长达四个小时的人生故事讲得是如此的生动。

好电影很多,它们中的绝大部分也是音乐很好的电影,音乐与电影的关系总是这么的密切,它们一同构成一部艺术佳作。

SCIM的五笔输入法输入书名号

刚才那文章中打的那些书名号让我很郁闷,SCIM的五笔输入法居然不能输书名号,只能切换到智能拼音下去输入。受不了,Google一下,总算是找到了办法:

输入“书名号”这三个字的五笔词组编码:nqkg,然后就可以从重码字选单中选择左右书名号了。对于其它标点符号,如顿号,也是一样的规则,输入它的词组编码gbkg就可以了。

的确有创意,PF一下SCIM的作者,可惜似乎不是很方便,不知道作者为什么不像其它输法那样把<>键映射成书名号……

误报这件事真的这么有意思吗?

这几天杀毒软件行业实在是一波未平,一波又起,本来很简单的一件事情,变得越来越火热了,各大杀毒厂商都加入到这场口水战中。本来无心参与这无聊的口水战,不过还是没有忍住,看在很久没有更新的Blog的份上,也来八卦几句。

5月18日,Symantec把装了MS06-070补丁的中文XP系统的系统文件误杀,导致系统无法正常启动。瑞星在第一时间抓住机会,大做文章,甚至没有忘记把广告打上了Live Messenger。当然江民和金山一定也是没有忘记迅速跟进。5月19日,卡巴斯基把瑞星的反流氓软件瑞星卡卡的组件识别为病毒,不知道这时的瑞星的心情是喜是忧,不过这么好的宣传机会是一定要抓住,战火开始转移到卡巴斯基身上。加上卡巴斯基与瑞星卡卡的对手产品“360安全卫士”说不清道不明的关系,事情就更好玩了。22日瑞星发表声明,把卡巴斯基称为“误杀之王”,并宣称在12小时内如果卡巴斯基不道歉,就会公布更多的“真相”。今天早上瑞星发布“真相”,穷举了2006年12以来,卡巴斯基的22次“误报”事件。

趋势科技在21日就Symatec事件发布表态,也许是没有忘记P594事件给自己带来的阵痛,这篇不痛不痒但又态度中肯的表态,还带来了不少赞许的声音。但今天新浪科技上一篇趋势科技声明称其产品误判率为“零”的报道,实在是让人一惊。我实在是无法理解为什么在这么敏感的时期要发布这样敏感的声明。P594虽然不是一次误报事件,但影响也算是不小,它同样也是导致的系统无法正常的工作。更何况,就在前几天,趋势的产品还将招商银行个人银行专业版的控件进行了误判,导致该软件无法正常的使用。果不其然,这篇声明很快让有点冷却的口水再次滴到了热油中。精彩评论小抄几句:

  • 多选漏选均不得分
  • 我一直以为这个杀毒软件是透明的……
  • 这年头,好像误判率已经成为杀毒软件最主要的指标了么?

还有更多更多的评论,作为一个Trender,是很不希望看到这样的评论的,然而见得多了,也许也就渐渐的麻木了。顺便再看看CXO们的捷报频传的邮件,调整一下心态,还是静心把工作做好……

前两天看了这篇社区和口碑问题,觉得是颇有道理。在这个Web 2.0和社区蓬勃发展的年代,“口碑”确实已经成为一个营销中非常重要的因素。小白们喜欢听“高手”介绍他们心目中优秀的产品,从而作为自己的选择。而“高手”们,往往又喜欢到网上社区中去寻找公认优秀产品,通过与他人的一致来“突现”自己的“高”和品位。于是乎,百粉vs狗粪(百度的粉丝和Google的Fans)、瑞星vs卡巴、Firefox vs IE、Ubuntu vs Windows……等等的纷争,就无时不刻的上演在Web 2.0的世界中,成为一道独特的风景线。而各大厂商也不会错过这样的一个好渠道,无数把装备精良的“枪”也频频出现在我们的视野中。有时一不留神,还真会被这些枪所打出的糖衣炮弹打个正着。

其实我一直不懂“长尾”、“草根”这两个频频亮像的词汇,一直到四月份去参加CSDN英雄会时才从王志东的口中了解了个大概。这个时代,在频频强调的Branding和Channel的同时,是不是也该关注一下构成“长尾”的“草根”?

Blog功能更新

这次的更新主要是加上了RSS(http://www.freemindworld.com/blog/feed.rss/),可惜的是Emacs Muse生成的RSS似乎并不能满足正常的使用需要,实在是琢磨不出来该怎么去设置了,Elisp又不会,看着Muse的源代码也只能干瞪眼。于是乎,土人自有土办法,先用Muse生成一个基本的RSS,然后再用自己写的C++程序重新把文件Parse一遍,把不合时宜的地方再改正过来。

另外一个更新就是从即日起所有的文章内容只要不是太长,就直接放在首页上,尽量减少点“阅读全文”的情况,这也是为了更好的配合RSS的使用。同时,也就去除了不必要的“阅读全文”的链接,可以直接点文章的标题或“固定链接”查看文章的页面。原先设计成首页只显示摘要的原因是受了CSDN Blog的影响。顺便解释一下“固定链接”,由于Blog系统设计的原因,可能并不能保证一篇文章的物理链接是固定不变的,引入“固定链接”的目的就是为每一篇文章提供一个固定的URL,即使Blog系统调整也可以保证这个链接是有效的。所以,如果需要收藏或从外部引用Blog的文章,就应该使用“固定链接”的链接,而不要直接使用地址栏中的URL。

公司开始供企业网内的Blog服务,名为TrendSpace,所以也会写点小东西在那里,同时转一些到这个Blog上,一文多用,充分利用资源,呵呵。凡是从那里转过来的文章,会是英文的,并且标记为 This article was originally posted on TrendSpace,如同下面这篇Go away, boring passwords一样。