由于之前程序里的一个BUG,导致返回的临时对象里的char*成员指向的内存其实已经被释放了。

当我使用这个临时对象给另外一个新对象赋值时,首先需要给新对象申请空间,我惊奇的发现,新new申请的内存地址和临时对象的那个char*成员的值相同。

想了一想,猜测是以下原因:由于new申请的内存都在堆中,在距离上次释放内存之后没有新申请内存,所以再次申请内存的时候按顺序申请,自然地址从上次释放的起始位置开始,自然和之前的那个指针值相等。

看似巧合,实际有必然性。
经过一天多的调试,证明对于使用动态分配内存成员的类来说,复制构造函数和对等号的重载是第一重要的。

以前做东西总是避免使用动态分配的内存,最近要做一些关于大数的东西,决定使用动态分配的一块内存存放我的大数,结果导致的问题一天才解决。

刚开始没有重载等号和定义复制构造函数,结果总是在程序运行的最后报一个堆错误,经过跟踪发现问题发生在程序最后对象析构时有一块内存被释放两次。

看来不能偷懒,赶紧重载等号,结果发现问题依旧,郁闷之极。

多次跟踪程序后,发现在重载的加法运算最后。我重载的加法运算符最后返回一个临时对象,由于返回临时对象时有一个隐式的赋值过程,即将返回的局部变量赋值给临时对象。结果返回时局部变量析构,导致临时对象里成员的那块内存已经无效。

于是定义了复制构造函数,问题解决。。
由于安装了巨大的vs2008的缘故,系统盘剩余空间捉襟见肘。而之前预留的xp分区由于08r2兼容性的全面提升,已经废弃了,所以决定合并两个分区。

首先备份xp分区里的桌面和一些别的程序配置信息。

重启至U盘下的Linux。(吸取上次用Windows操作分区导致蓝屏和分区表丢失的教训,这次修改分区使用比较稳定的Linux。)
由于Linux所在的分区号大于要删除分区的分区号,所以无法使用电脑上的Linux来操作分区,所以需要使用U盘上的。

备份分区表:sudo fdisk /dev/sda -l > ~/parinfo.bak
然后用VI看一下是否成功导出了。若成功,发送至邮箱(放至U盘也可),注意不要放在硬盘上,试想硬盘分区表丢失后去哪里找这个备份来恢复。

启动GParted,图形化的,操作很傻瓜化,其实推荐命令行操作,不过既然有图形化的,我就懒得去用命令了,一旦敲错后果很严重。
照例拖来拖去,先卸载已挂载的所有分区号大于要删除分区的分区。然后删除分区,调整大小,扩大分区。(要删除的分区是个逻辑分区,而要扩大的分区是主分区,故不能直接合并)。成功后再次保存分区表。

重启至Windows下,会进行硬盘自检,完毕后进入系统,可看到分区已经扩大至30G。
不得不说Visual Assist X这个插件很爽,这几天做个密钥对生成器,刚开始试图用VI做,后来不得不承认效率比较低并且还费脑子还容易出错。于是决定装个IDE。

vs2008一直就没有进入我的视线:巨大的体型,我不宽裕的c盘空间,奇怪的使用体验,是我不选择它的原因。

刚开始决定装vs2005,不算大,又足够用。还不算太老。结果可能是由于兼容性问题(毕竟vs2005也是面向xp开发的,没有UAC等东西),安装速度非常慢,好不容易装完了,告诉我要装个400m的sp1,又是极缓慢的安装,装完了居然又要我装个300m的更新!并且第二个更新还没装就已经占用了c盘1.5g的空间。。实在不能忍,于是又卸载了。

不得不尝试vs2008,结果发现按我的需求最精简化后仍需要c盘1.9g空间。于是放弃。

只能安装vc6.0了,虽然Windows告诉我有兼容性问题,但是以前使用的经验来看并不影响使用。安装过程也有点慢,装好后安装Visual Assist X,启动程序,又看到了熟悉的界面。

由于刚开始学编程的时候就用的vc6.0,所以对它最为熟悉。相比于08下平滑的字体,6.0古朴的字体反而看起来更为顺眼。程序面板的布局也比较舒服。

爽。开始工作。

博客恢复正常。

[| 2010/04/01 13:11]
咨询客服,说问题的原因是Apache的mod_rewrite模块的问题,粗略看了看错误日志,大概也是rewrite规则错误之类的。等了一会,恢复了。

博客出现问题--暂未修复

[| 2010/04/01 12:37]
今天从11点开始,网站根下的".htaccess"就失效了,重新上传无效,估计是主机问题。结果导致网站目录暴露,URL静态化失效。暂时只能靠Beta1.0版博客程序访问。幸亏对日志和配置文件的文件夹设置了规则禁止访问,否则网站日志和一些重要配置文件有可能泄露。正在寻找解决办法中。。。。。。。。
自从上周开始,别人就访问不了我自己电脑架的服务器了。而上周我干的唯一一件事就是用虚拟机来回架局域网和代理。所以怀疑把Windows哪里搞坏了,或者被学校封端口了。

重启到Linux下。一切正常,说明不是端口问题。

重启回来,开启主机上的服务器,还是不行,说明不是VMware网络问题。

关闭瑞星防火墙,360等。还是不行。

查看路由表,没问题。

百度,无结果。

去控制面板里转了下。发现Windows防火墙开了。。。。汗,以前我都把服务禁用了,估计前几天调什么东西的时候不小心把防火墙顺带打开了。。郁闷,关了防火墙,一切正常。
用Linux有一个问题是没有足够强大的FTP工具,自带的GFTP等软件都有乱码问题,好不容易弄的显示不乱了,下载下来还容易乱码。

我在windows下一直是用FlashFXP的。Linux下我装了Wine,不过一直没认真研究过,Wine能直接运行的exe程序少之又少,所以一直没有太重视。

今天试了试,发现FlashFXP在Wine下是可以运行起来的,不乱码,完美运行。很爽。


另:Firefox3.6用Wine也能跑起来,我个人感觉比linux下的那个好像要爽一点。没有细用,我改用Chrome了。
很久不用电脑上装的那个Ubuntu 9.04了。最近乱调把Windows弄的不能向外提供web服务了。刚开始以为是端口被封,重启到Linux下一试发现可以了,估计是我之前调路由表什么的调出了毛病。

好久不到Ubuntu下,既然来了就打理打理。先升级了一些软件包。又发现了一个好用的Ubuntu下的管理工具:Tweak。这是个类似于Windows下优化大师的东西,当然功能少很多了。不过也集成了很多有用管理功能,比如清理垃圾文件,清理内核,添加一些有用的第三方源等等。功能不能说有多强大。但是确实很方便,适合想把Ubuntu改造成Windows那样用的人。




FluxBox配置。

[| 2010/03/28 02:56]
自从昨天重装FluxBox后发现在窗口Title上右键怎么也不出那个菜单了。很郁闷,但是不知道问题在哪里。

仔细查看配置文件后发现:/root下有FluxBox的配置文件,用户根目录下也有。但是用户根目录下的配置文件均为空。/root下的配置文件有初始值。于是推断由于是xdm作为登陆器,xdm在用户登录后以系统权限调用FluxBox,自然使用的是/root下的配置文件。但是怪异的是/root下的配置文件修改起来貌似没有作用。郁闷了一下,后来慢慢研究,查到在title上右键的定义是在keys配置文件里,那里面定义的动作是:WindowMenu。而该动作由init里指定的:~/.fluxbox/windowmenu 文件中内容指定。而我的/root下的该文件明明没问题。。试着改了改用户目录下的那个。。好用了。原来FluxBox使用的是用户家目录下的配置文件,悲剧,白让我弄了半天。

不过,一个疑问:为什么用户家目录下的配置文件没有被初始化?----本人猜测:之前的卸载FluxBox并重新安装的过程中出现过一次错误,后来重启机器再安装才好,可能是那里弄的混乱了。或者是先装xdm再装FluxBox的问题?


第二个疑问:FluxBox刚进去的时候字体是很清楚的,但是restart一下FluxBox后或者点菜单栏里的FluxBox后字体会发虚。。不知为何,网上资料都是讲要换字体啊什么的,但是很明显前后两次字体没变,应该是字体平滑上的问题。这个bug在我的主机linux上也有,一直未解决。
分页: 17/21 第一页 上页 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]