摘要: Visual Studio 内存泄漏检测方法非MFC程序可以用以下方法检测内存泄露:1.程序开始包含如下定义:#ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)#else#define DEBUG_CLIENTBLOCK#endif // _DEBUG#define _CRTDBG_MAP_ALLOC#include #include #ifdef _DEBUG#define new DEBUG_CLIENTBLOCK#endif // _DEBUG2.程序中添加下面的函数:_CrtSet 阅读全文
posted @ 2013-10-16 13:28 AlexChowG 阅读(1077) 评论(0) 推荐(0) 编辑
摘要: strcpy慎用因为如果源字符串和目的字符串分配在连续的空间,而且空间大小仅仅是足够容纳最初的字符串,那么strcpy在复制是只考虑源字符串的\0,不会考虑空间大小,那么就很容易使得访问目的地址越界,而且如果目的字符串存放的空间在源字符串的前面,而且比源字符串短,那么,复制将会导致源字符串前面的字符丢失123\0123456789\0目的 源字符串拷贝后123\0123456789\0目的 源字符串123456789\0789\0目的 源所以调用strcpy的字符串目的地和源都必须有足够的预留空间 阅读全文
posted @ 2013-10-16 13:27 AlexChowG 阅读(233) 评论(0) 推荐(0) 编辑
摘要: main函数执行前后执行其他语句main 运行前static 类型的对象会在main函数之前初始化,所以在某个类的构造方法执行的代码是在main函数前执行,可以通过这种方式实现在main函数之前执行代码main跳出后main()函数执行完毕后会倒着顺序执行atexit函数,一个程序最多可以注册32个atexit函数先注册后执行void exe07_part1(){ cout<<"part1"<<endl;}void exe07_part2(){ cout<<"part2"<<endl;}void exe07 阅读全文
posted @ 2013-10-16 13:03 AlexChowG 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 套接字操作系统管理的进程的套接字表,每一个进程拥有一张套接字表套接字有两种一种是被动套接字(作为Server时),一种是活动套接字(作为Client时)。TCP/IP 协议族 常量 PF_INET =2TCP/IP 地址族 常量 AF_INET =2套接字端点地址一般数据结构struct sockaddr{ //一般结构定义 u_short sa_family; //地址族 char sa_data[14]; //地址};套接字端点地址的精确数据结构定义struct sockaddr_in{ u_short sin_family; //地址类型,值一直都是AF_INET u_short... 阅读全文
posted @ 2013-10-16 12:54 AlexChowG 阅读(446) 评论(0) 推荐(0) 编辑
摘要: C++ 11 多线程相关库thread类thread构造方法,支持lambda语句thread(函数名, 函数参数...)成员函数:detach()//不阻塞运行开始线程join()//阻塞主线程,运行线程互斥的实现使用了Mutex 类 阅读全文
posted @ 2013-10-16 12:50 AlexChowG 阅读(161) 评论(0) 推荐(0) 编辑
摘要: ntohs =net to host short int 16位htons=host to net short int 16位ntohs =net to host long int 32位htonl=host to net long int 32位简述: 将一个无符号短整形数从网络字节顺序转换为主机字节顺序。 #include u_short PASCAL FAR ntohs( u_short netshort); netshort:一个以网络字节顺序表达的16位数。注释: 本函数将一个16位数由网络字节顺序转换为主机字节顺序。返回值: ntohs()返回... 阅读全文
posted @ 2013-10-16 12:49 AlexChowG 阅读(685) 评论(0) 推荐(0) 编辑
摘要: C++多线程需要的库文件windows 下process.h函数:_begingthread(void*(void*) pfunc,unsigned stack, void* funcParam);pfunc为只有一个void类型的指针参数(可以通过强制转换为void*类型)的void返回类型函数指针stack栈大小,一般为0funcParam为pfunc的参数指针,需要强制转换为void*类型使用:int sum(struct param){ return param.a+param.b;}struct param p;_beginthread((void(*)(void*)sum,0,(. 阅读全文
posted @ 2013-10-16 12:48 AlexChowG 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 在c如果需要编译winsock 程序链接出错xx@的错误在链接参数加入-lwsock32 或者 在头文件第一句加入#pragma comment(lib,"ws2_32.lib")多线程程序 加入 -lpthreadGC2 阅读全文
posted @ 2013-10-16 12:47 AlexChowG 阅读(166) 评论(0) 推荐(0) 编辑
摘要: stl提供了三个最基本的容器:vector,list,deque。vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。list就是数据结构中的双向链表(根据sgi stl源代码),因此它的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随即存取变的非常没有效率,因此它没有提供[]操作符的重载。但由于链表的特点,它可以 阅读全文
posted @ 2013-10-16 12:47 AlexChowG 阅读(157) 评论(0) 推荐(0) 编辑
摘要: RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。RTTI提供了以下两个非常有用的操作符:(1)typeid操作符,返回指针和引用所指的实际类型。(2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用。typeid操纵符会返回一个type_info类,这个类有一个成员函数是name()得到类型名,type_info类构造方法私有,只能由typeid产生,type_info重载了== 和!= ,隐藏了赋值运算符=,所以可以用来比较两个变量的类型是否 阅读全文
posted @ 2013-10-16 12:45 AlexChowG 阅读(303) 评论(0) 推荐(0) 编辑