
C/C++
jamesmf
这个作者很懒,什么都没留下…
展开
-
不使用任何临时变量进行2个数的交换
void swap( int *x, int *y ){ *x += *y; *y = *x - *y; *x -= *y;}原创 2009-07-18 08:49:00 · 597 阅读 · 0 评论 -
内存问题
随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。而这些难以定位的BUG基本上可以归为两类:内存错误和并发问题。而又以内存错误最为普遍,即使是久经沙场的老手,也有时也难免落入陷阱。前事不忘,后世之师,了解这些常见的错误,在编程时就加以注意,把出错的转载 2011-06-15 23:48:00 · 538 阅读 · 0 评论 -
关于技术交流的一点看法
技术交流,是一个相互探讨、取长补短、共同学习、共同进步的过程,绝对不要变成一个某人主讲,其他人倾听的培训。事先确定主题,每次一个主题。明确每一次交流的目标和内容,希望得到解决的问题和交流的重点要非常清晰。不能纯理论上的交流,要结合具体实例进行分析和阐述。原创 2011-06-26 23:36:00 · 744 阅读 · 0 评论 -
旧事重提:再谈局部变量返回
在做内存分配函数hook过程中,出现了一个导致程序崩溃的问题,最终定位到问题产生的罪魁祸首居然又是不知哪位大侠写的函数返回局部变量导致的。 该函数的实现大致是这样的:char * GetDateTime (){ char ret[64] = {0};原创 2011-09-25 20:55:35 · 851 阅读 · 0 评论 -
内存碎片
动态内存分配会造成碎片问题,即在分配和释放了大量内存后,剩余的内存会“碎片化”----空闲内存被分割成大量小“空洞”,每个空洞都很小,无法容纳程序所需对象,从而使这些空闲内存毫无用处。因此,可用空闲内存量远远小于初始内存总量减去已分配的内存量。原创 2011-11-19 21:03:18 · 596 阅读 · 0 评论 -
Visual Leak Detector
初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会有太大的影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人转载 2011-11-19 17:36:39 · 583 阅读 · 0 评论 -
用GDB调试程序
GDB概述GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:启动你的程序,可以按照你的自定义的要求随心所转载 2011-11-24 23:45:27 · 1610 阅读 · 0 评论 -
C++中的new与delete与虚析构函数的关系的实验研究
这是我在进行内部培训《C++程序编译与运行期间存储资源的分配》期间,为了保证培训内容的准确性而做的实验,最初想把它写成一篇介绍C++编译器如何解释动态内存分配的文档,考虑到各个编译器之间的差异,以及我个人对编译器的了解十分有限,在这里我没有下定论,而只给出个人的初步分析结果。以下实验是在VC7.1,缺省的调试模式下进行的。作为一个惯例,我对做实验的类重载new与delete操作符,实现方式是调转载 2012-07-02 23:18:42 · 2814 阅读 · 0 评论 -
C++中的回调类设计模式在后台插件开发中的应用
关键字:回调函数,回调类,设计模式摘要: 本文通过引入回调类设计模式,简化在面向对象中的回调机制,特别适合于动态链接库程序对主程序的函数回调。本文给出一个具体而微的例子,将一个面向过程的C语言世界中非常普遍的回调机制,在面向对象的世界里进行了转化,采用回调类设计模式,现实问题得到优雅的解决。 背景介绍:WLTP是无线话务量测试平台,是基于3GLT开发的话务量测试工原创 2012-07-02 23:08:58 · 2386 阅读 · 0 评论 -
C&C++中的异常处理介绍
1. 简介简介许多的编程新手对异常处理视而不见,程序里很少考虑异常情况。一部分人甚至根本就不考虑,以为程序总是能以正确的途径运行。譬如我们有的程序设计者调用fopen打开一个文件后,立马就开始进行读写操作,根本就不考虑文件是否正常打开了。在编程过程中恰当地使用异常处理可以增强软件的健壮性。本文将介绍C和C++对于异常处理的一些常用方法。2. C语言异常处理2.1无条转载 2012-07-02 23:16:12 · 3024 阅读 · 0 评论 -
大内高手—常见内存错误
<br />随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。<br />而这些难以定位的BUG基本上可以归为两类:内存错误和并发问题。而又以内存错误最为普遍,即使是久经沙场的老手,也有时也难免落入陷阱。前事不忘,后世之师,了解这些常见的错误,在编程时就加以注意,把出错的概率降到最低,可以节省不少时间。<br />这些列举一些常见的内存错误,供新手参考。<b转载 2011-02-08 18:12:00 · 552 阅读 · 0 评论 -
变参函数的实现原理
<br /><br />C语言要求函数调用者按照函数原型进行调用,如果调用参数与函数原型不一致,编译器就会发出警告。而变参函数的参数是不确定的,它允许同一个函数有多种不同的参数组合,编译器不会对可变部分的参数做类型检查,因而在使用的时候拥有较大的灵活性(当然也容易出错)。本节我们将一起研究一下变参函数的实现原理,先看一个例子程序:<br />o 使用变参函数,需要libc库支持,头文件stdarg.h里提供一些必要的宏定义。#include <stdarg.h>#include <stdio.h><br转载 2011-02-08 18:09:00 · 3651 阅读 · 1 评论 -
如何处理构造函数的失败?
由于构造函数没有返回值,因此通过返回错误码来判断构造函数是否成功是不可能的,所以最好办法应该是抛出一个异常。另外在抛出异常时需要注意的是,由于构造函数抛出异常的话,对象的析构函数就不会执行了,故在抛出异常的同时还需要对已经执行的动作(如分配了内存、打开了文件、锁定了信号量等等)进行清理,将这些资源释放掉。如果不通过抛出异常来处理构造函数的失败,还有一种不是很好的办法,就是通过标志位来进行记录内部状态,然后通过判断内部状态来识别构造函数是否正常。但这种方式一般不推荐使用,只有在有充分理由不能使用抛出异常时使用原创 2011-01-12 22:01:00 · 4007 阅读 · 1 评论 -
问题 error C2065: '_beginthreadex' : undeclared identifier 的解决办法
今天在寻找程序异常问题定位方法时,从网络上拷贝到一段如下代码:#include #include #include const int cnThreadnum = 4; UINT WINAPI Worker(LPVOID lpParam) { srand((DWORD)lpParam); DWORD dwTid = GetCurrentThreadId();原创 2009-07-16 22:32:00 · 13227 阅读 · 1 评论 -
C语言中的多级指针
前言C语言中指针,可以算是最灵活,最强大的地方,同时也是最艰深的地方。用不好的话,什么段错误,内存违例等以前没见过的东西都会跳出来。最近看《UNIX系统编程》,感觉能把C语言用到这个水平,才能算是登堂入室。一般来说,我们会把指针跟数组联系起来理解,比如*p就是一个一维数组,**p是两维数组等,而一般而言,见到两维的指针也算是难得了,更高维的只怕看一会就会晕掉。《UNIX系统编程》中转载 2009-07-18 10:04:00 · 5677 阅读 · 0 评论 -
WinPcap编程错误:error C2079: 'IPAddress' uses undefined struct 'sockaddr_storage的解决办法
出现这个问题的原因一般是由于Winsock的版本和IPv4和IPv6的版本兼容性问题。由于新版的 Winpcap 完全使用了新的 Winsock(支持IPv6),因此这个问题可能影响到每一个已有程序。 以下是新旧两版的 packet32.h 之间的差异:【新版本】typedef struct npf_if_addr { struct sockaddr_storage原创 2009-07-26 15:20:00 · 13176 阅读 · 2 评论 -
注册表中保存的VC安装路径
注册表中保存的VC6安装路径:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/6.0/Setup/Microsoft Visual C++里面的ProductDir键值保存的内容就是安装路径。 注册表中保存的VC8安装路径:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/8.0/原创 2009-09-01 22:46:00 · 1892 阅读 · 1 评论 -
const关键字放在“类型前”与“类型后”
C++标准规定,const关键字放在类型前 与 类型后 是等价的。 const int n=5; //same as belowint const m=10即const char*等同于 char const*。const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 事实上这个概念谁都有只是三种声明方式非常相似原创 2009-10-11 15:30:00 · 4569 阅读 · 0 评论 -
C/C++笔试编程题集
1、编一个程序求质数的和,例如F(7)=2+3+5+7+11+13 +17=58。(软件业巨无霸——微软笔试面试题目(1))2、自己定义数据结构,写出程序:二叉树的前序遍历。(中国最重要的电信设备和全面电信解决方案供应商之一——阿尔卡特(中国)的面试题目)3、编程输出以下格式的数据。(趣味题) When i=0 1 When i=1 7 8转载 2009-10-13 22:52:00 · 16032 阅读 · 0 评论 -
C C++语言—入门必做的题
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不 D F G 同字母。编程求出这些数字并且打出这个数字的 + D F G 算术计算竖式。 ─────── X Y Z D E 2. A、B、C、D、转载 2009-10-13 23:08:00 · 5105 阅读 · 1 评论 -
用STL快速编写ini配置文件识别类
IniFileAnalyse.h文件:#include #include #include #include #include #include using namespace std;typedef map > strMap;typedef strMap::iterator strMapIt;const char * const MIDDLESTRING = "____***____原创 2009-10-14 23:12:00 · 679 阅读 · 0 评论 -
VC使用MSXML解析XML文档
概述:DOM解析将会把一个完整的XML文档读进来,生成一个结构树。这样会要把XML文档全部都加载到内在中。所以解析起来的速度会要慢一些。 1、如何加载xml文件: //创建DOM,加载XML文档 MSXML::IXMLDOMDocumentPtr pCommandDoc; pCommandDoc.CreateInstan转载 2009-10-15 23:49:00 · 1107 阅读 · 0 评论 -
VTD-XML
序言 本文所提及的VTD-XML并非本文作者原创,作者只是对它进行介绍。问题 通常当我们提起XML的使用时,最头痛的部分便是XML的verbosity与XML的解析速度,当需要处理大XML文件时这个问题便变得格外严重。我在这里提及的,便是如何优化XML处理速度的话题。当我们选择处理XML文件的时候,我们大致上有两种选择:DOM,这是W3C的标准模型,它将XML的结构信息以树形的方式构建转载 2012-07-21 10:16:04 · 9258 阅读 · 1 评论