C++知识点
文章平均质量分 67
cosmoslife
多媒体编程、网络编程、系统编程、网络安全编程
展开
-
[内存泄露]Purify工具介绍
C/C++内存问题检查利器——Purify一、引言我们都知道软件的测试(在以产品为主的软件公司中叫做QA—Quality Assessment)占了整个软件工程的30% -50%,但有这么一种说法,即使是最优秀测试专家设计出来的测试案例,也无法彻底地检测到内存上的问题。使用C/C++开发的团队一定有被其内存问题折磨过的经历,内存问题一直是C/C++开发人员的心头之痛。特别当转载 2013-07-20 22:51:47 · 835 阅读 · 0 评论 -
明晰C++内存分配的五种方法的区别
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统转载 2012-06-12 22:03:57 · 518 阅读 · 0 评论 -
BBS总汇
西南地区:学校 站名 域名 ip 备注电子科技大学 一网情深 bbs.uestc.ed.cn 202.112.14.174电子科技大学 网络幽魂 bbs.cs.uestc.edu.cn 202.115.16.8 计算机学院电子科技大学 就业b转载 2012-05-18 19:51:32 · 2507 阅读 · 0 评论 -
如何实现参数个数不定的函数?
原理就是声明一个类似 int func ( char *fmtstr, ...)的函数 然后在函数中判断fmtstr的下一个参数的类型如float,然后将fmtstr的地址+sizeof(float),得出的值作为那个float参数的地址。以此类推。 但是手工这么实现有点太繁了,又容易出错,所以一般的编译器实现中有一些宏来完成这些动作。就是va_list之类的。转载 2012-06-06 12:16:32 · 672 阅读 · 0 评论 -
c++ 字符类型总结
1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。 UNICODE:wchar_t是Unicode字符的数据类型,它实际定义在里: typedef unsigned short wchar_t; 另外,在头文件中有这样的定义:typedef转载 2012-06-06 12:03:48 · 507 阅读 · 0 评论 -
static_cast、dynamic_cast、reinterpret_cast、和const_cast
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。st转载 2012-06-06 16:37:10 · 590 阅读 · 0 评论 -
typedef的四个用途和两个陷阱
typedef的四个用途和两个陷阱用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb;转载 2012-06-05 18:12:40 · 473 阅读 · 0 评论 -
VC中的debug和release(精华)
在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当头一棒啊,可是疼归疼,问题总要解决,下面将讲述一下我的几点经验,看看是不是其中之一:1. 变量。大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋转载 2012-05-17 14:27:09 · 663 阅读 · 0 评论 -
内存错误(精华)
写了个程序,在DLL中用malloc分配了一块内存,但是在exe程序中释放,结果程序crash,原因就是:其原因可能是堆被损坏,这也说明 TestMySticker.exe 中或它所加载的任何 DLL 中有 bug。想了半天以为是自己的写法有问题,后终于在google上找到了原因,汗。。。 以下文字引用自 http://hi.baidu.com/huhe/blog/item/0b4转载 2012-05-17 14:44:07 · 977 阅读 · 0 评论 -
C++ 内存池 -- C++ Memory Pool
这是我翻译的文章,来自 Code Project,原文作者: DanDanger2000. 原文链接: http://www.codeproject.com/cpp/MemoryPool.aspC++ 内存池l 下载示例工程 – 105Kbl 下载源代码 – 17.3Kb目录l 引言l 它怎样工作转载 2012-06-02 13:18:58 · 644 阅读 · 0 评论 -
VC相关学习笔记
1、隐藏鼠标int i = ShowCursor(FALSE); for ( i; i >= 0 ;i-- ) { ShowCursor(FALSE); }2、显示鼠标 int i = ShowCursor(TRUE); for ( i;i { ShowCursor(TRUE); }3、在Picture Control上显示图片转载 2012-06-01 15:01:16 · 468 阅读 · 0 评论 -
VC小技巧20个
一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); 二、关闭CD_ROM mciSendString("Set cdAudio door closed wait",NULL,0,NULL); 三、关闭计算机 OSVERSIONINFO OsVersionInfo; //包含操作系统版本信转载 2012-06-01 14:54:41 · 668 阅读 · 0 评论 -
回调函数
对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。 什么是回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。 为什么转载 2012-06-12 22:04:11 · 604 阅读 · 0 评论 -
创建线程函数区别CreateThraed/_beginthreadex/AfxBeginThread(重点理解)
(1)CreateThread函数CreateThread:是Windows的API函数(SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用),提供操作系统级别的创建线程的操作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要使用。因为:C Runtime中需要对多线程进行纪录和初始化,以保证C函数库工作正常。MFC也需要知道新线原创 2012-06-23 15:56:58 · 1212 阅读 · 0 评论 -
VC内存泄露检查工具:Visual Leak Detector
http://www.codeproject.com/KB/applications/visualleakdetector.aspx 初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏转载 2013-07-20 22:15:12 · 817 阅读 · 0 评论 -
static用法小结
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto,转载 2013-04-10 13:43:29 · 705 阅读 · 0 评论 -
指针内存分配
return语句不可返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。char * Func(void){char str[] = "hellow world";// str的内存位于栈上 return str; // 将导致错误}void Test4(void){char *str = NULL; str = GetSt转载 2012-09-29 11:29:43 · 625 阅读 · 0 评论 -
_bstr_t cstring转换
刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。我们先定义一些常见类型变量借以说明int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]="程佩君";char temp[200];char *buf;CString str转载 2012-08-23 15:41:16 · 729 阅读 · 0 评论 -
【C++】预编译命令
C++ 预编译命令C++预处理指令#include#define#undef#pragma#import#error#line#ifdef#ifndef#if#else#elif#endif 宏以#起始不以;结束 一. #include文件包含预编译期发现#include后,将会寻找HeaderName并把其包转载 2012-07-25 14:40:14 · 778 阅读 · 0 评论 -
实现字符串类String的设计,实现赋值运算符重载函数,默认、一般、拷贝构造函数,析构函数
面试中被考住了啊!实现字符串类String的设计,实现赋值运算符重载函数,默认、一般、拷贝构造函数,析构函数包含指针成员的类深赋值运算符重载,类设计,类的默认、拷贝构造函数,析构函数实验参考class String{ char * m_data;public: String(); String(const char *str=NULL); S原创 2012-07-19 23:47:58 · 2420 阅读 · 0 评论 -
如何实现类的成员函数作为回调函数
如何实现类的成员函数作为回调函数 回调函数(Callback function)大量用于Windows的系统服务,通过它,程序员可以安装设备驱动程序和消息过滤系统,以控制Windows的有效使用。许多程序员都发现,利用MFC或者其它的C++应用编写回调函数是非常麻烦的,其根本原因是回调函数是基于C编程的Windows SDK的技术,不是针对C++的,程序员可以将一个C函数直接作为回转载 2012-07-18 18:35:41 · 560 阅读 · 0 评论 -
堆和栈的区别
非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据转载 2012-07-15 02:13:39 · 694 阅读 · 0 评论 -
明晰C++内存分配的五种方法的区别
明晰C++内存分配的五种方法的区别 作者:出处:bbs责任编辑: 方舟 [ 2006-04-24 16:54 ]在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候转载 2012-07-15 02:09:52 · 807 阅读 · 0 评论 -
借助 C++ 进行 Windows 开发---线程池取消和清理
取消和清理是相当困难的问题,以解决说到多线程应用程序。如果是,可以安全地关闭句柄?您是否需要考虑哪个线程取消的操作?更糟的是,一些多线程的 Api 不重入,潜在地提高性能,但还为开发人员增加的复杂性。我引入了最后一个月的专栏中的线程池环境 (msdn.microsoft.com/magazine/hh394144)。此环境允许的一项关键功能是清理组,而这是什么我将重点此处。清理组不要尝转载 2012-06-30 23:08:34 · 818 阅读 · 0 评论 -
学VC时做的一些笔记
字体应用:CFont font;font.CreateFont(10 + x*8, //字体字符的逻辑高度 0, //字符平均宽度取默认值 0, //文本行角度为0,水平 0, //字符角度为0,正交 FW_NORMAL, //正常字体 FALSE, //不倾斜 FALSE, //不加下划线 FALSE, //不加删除线 ANSI_CHARS转载 2012-06-01 15:01:47 · 523 阅读 · 0 评论 -
C++中数值--字符串间的转换
编写代码时经常需要在数值(int, long, float, double ...)与字符串间的相互转换。C/C++中相关的转换方法主要有如下几种: (一)、使用CRT库中的转换函数族。_itoa, _itow 及其反转换 atoi, _wtoi_ltoa, _ltow 及其反转换 atol, _wtol_ultoa, _ultow_ecvt, _fcvt, _gcvt转载 2012-06-01 14:56:12 · 527 阅读 · 0 评论 -
为什么C程序一定要从main开始执行???
main只是开发工具所规定的一个特殊函数名称而已。它既不是程序的入口,也不是必须要有的函数。 程序的入口点记录在可执行文件中的一个数据,该数据标明程序从哪个位置开始执行,这个数据是连接程序的时候由link.exe确定的,可以把程序的入口点 指定为任意函数,甚至可以自己编辑可执行文件修改程序的入口点。在默认情况下,link.exe会连接开发工具中带有的一个obj文件,并设置该obj中 的固定转载 2012-05-31 15:43:54 · 2122 阅读 · 0 评论 -
我来理解extern "C"
编程快5年了, 今天才算对extern "C" 有个较为清晰的认识. 本人对extern "C"的认识可以分为三个阶段: 1. 从别人的代码里面看到有这个东西, 自己不认识, 就上网查查, 大概明了它是什么意思.2. 看到别人的代码里面包含用c写的代码就用extern "C", 那么自己依葫芦画瓢用c代码的时候也加这个东西. 自己感觉对这个东西很熟悉了.3. 编译链转载 2012-05-30 15:40:24 · 766 阅读 · 0 评论 -
C程序中的内存管理
相比静态地分配内存空间,使用动态内存分配具有明显的优势:1, 分配空间的大小够精确: 设想一个读取用户输入行的程序, 如果使用静态分配的数组作为buffer, 那么, 你如何确定该数组的长度呢? 太大或太小都不合适. 因为你无法事先知道用户输入字符串的长度. 而使用动态内存分配就精准多了.2, 静态分配的空间大小无法更改, 而动态分配的内存大小是可调的.所 以, 理解C语言转载 2012-05-30 17:37:18 · 445 阅读 · 0 评论 -
malloc后,再free 却出错
昨天研究了,斐波那契函数,如下代码:#include "stdio.h"#include "malloc.h"long phponach(int n);unsigned long phbonache(int n);int main(int argc, char* argv[]){ int nRet= 0; nRet = phponach(10); pri转载 2012-05-30 17:11:15 · 717 阅读 · 0 评论 -
C++ 对象的内存布局(下) .
C++ 对象的内存布局(下) 陈皓http://blog.csdn.net/haoel <<<点击这里查看上篇 重复继承 下面我们再来看看,发生重复继承的情况。所谓重复继承,也就是某个基类被间接地重复继承了多次。 下图是一个继承图,我们重载了父类的f()函数。 其类继承的源代码如下所示。其中,每个类都有两个变量,一个是整形(4转载 2012-05-11 20:49:51 · 418 阅读 · 0 评论 -
C++ 虚函数表解析
陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是转载 2012-05-11 19:31:47 · 452 阅读 · 0 评论 -
C++学习摘要之七:运算符重载 .
第七章 运算符重载C++语言中预定义的运算符的操作对象只能是基本数据类型,但是,在实际应用中,对于很多用户自定义数据类型(如类)也需要类似的功能,这就需要对已有的运算符赋予多种含义,使同一个运算符具有作用于不同类性的数据导致不同类型的行为,这就是运算符重载。因此,运算符重载的目的是设置C++语言中的某一运算符,让它们之间并不冲突,C++语言会根据运算符的位置辨别应使用哪一种功能进行运算。可见,转载 2012-05-12 20:23:21 · 514 阅读 · 0 评论 -
C++学习摘要之五:静态成员 .
第五章 静态成员在一个类中还可以定义静态成员,但静态成员是所有对象公有的。静态成员分为静态数据成员和静态成员函数。1.静态数据成员在类中定义静态数据成员的方法就是在该成员的前面加上关键字static。定义静态数据成员的语句格式如下:class 类名{ …… static 类型说明符 成员名; ……};静态数据成员是类的所有对象共享的成转载 2012-05-12 19:57:19 · 444 阅读 · 0 评论 -
字节对齐详解
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型转载 2012-05-31 08:53:42 · 475 阅读 · 0 评论 -
解析C语言中的sizeof
解析C语言中的sizeof一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(t转载 2012-05-31 08:53:33 · 542 阅读 · 0 评论 -
C语言宏定义技巧
1,防止一个头文件被重复包含#ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef unsigned char boolean; /* Boolean value type. */ typedef un转载 2012-05-30 17:31:52 · 458 阅读 · 0 评论 -
C++学习摘要之三:继承和派生 .
第三章 继承和派生继承性是面向对象程序设计最重要的机制之一。 1.继承的概念所谓继承(inheritance)就是利用已有的数据类型定义出新的数据类型。在继承关系中,被继承的类称为基类(base class)或父类,而通过继承关系定义出来的新类则被称为派生类(derived class)或子类。派生类既可以对基类的性质进行扩展又可以对基类进行限制,从而得到转载 2012-05-12 10:22:36 · 429 阅读 · 0 评论 -
ANSI C标准函数库
ANSI C标准函数库absread()读磁盘绝对扇区函数原形:int absread(int drive,int num,int sectnum,void *buf)功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。参数:dr转载 2012-05-30 17:03:17 · 824 阅读 · 0 评论 -
malloc,calloc,realloc等内存分配函数区别
三个函数的声明分别是:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_t nelem, size_t elsize);都在stdlib.h函数库内它们的返回值都是请求系统分配的地址,如果请求失败就返回NULLmalloc用于申请一段新的地转载 2012-05-30 17:08:01 · 405 阅读 · 0 评论