作为程序员,我们平时最担心见到的事情是什么?是内存泄漏?是界面不好看?……错啦!我相信我的看法是不会有人反对的--那就是,程序发生了崩溃!
“该程序执行了非法操作,即将关闭。请与你的软件供应商联系。”,呵呵,这句 M$ 的“名言”,恐怕就是程序员最担心见到的东西了。有的时候,自己的程序在自己的机器上运行得好好的,但是到了别人的机器上就崩溃了;有时自己在编写和测试的过程中就莫名其妙地遇到了非法操作,但是却无法确定到底是源代码中的哪行引起的……是不是很痛苦呢?不要紧,本文可以帮助你走出这种困境,甚至你从此之后可以自豪地要求用户把崩溃地址告诉你,然后你就可以精确地定位到源代码中出错的那行了。(很神奇吧?呵呵。) 阅读全文>
发表于 @ 2007年03月08日 16:42:00|评论(loading...)|编辑
工程里面写了这么一段代码,目的是为了实现DWORDDWORD*之间完成转型,刚开始只在一个.cpp文件里面使用没有什么问题,但是在两个或以上.cpp(比如1.cpp和2.cpp)里面使用就出现问题了,会报如下联结错误:1.obj : error LNK2005: "public: static struct boost::mpl::failed * * * * * * * * * * * * (__thiscall `unsigned long * __cdecl union_cast(unsigned long)'::`2'::obj_type_size_is_not_same_with_src_type::** * * * * * * * * * * __cdecl `unsigned long * __cdecl union_cast(unsigned long)'::`2'::obj_type_size_is_not_same_with_src_type15::assert_arg(void))(unsigned long *,unsigned long)" (?assert_阅读全文>
发表于 @ 2007年03月08日 14:17:00|评论(loading...)|编辑
new和delete操作都是和模块相关的,每个模块都会管理自己的堆,如果跨模块的话,就会导致堆内存管理的混乱,出错再所难免了阅读全文>
发表于 @ 2007年03月08日 00:41:00|评论(loading...)|编辑