
c++编程基础
文章平均质量分 86
Hui_NJ
11年多的C/C++研发经验
展开
-
windbg调试程序
1.取消编译优化选择,将编译后的binary 及其 符号文件放入 bin下2.设置gflags.exe,在程序刚启动就将其捕获 3. 进程:DoScan.exe在windbg.exe 设置如下:(1)加载符号文件0:000> .reload /f doscan.exe0:000> .reload /f cliproxy.dll"cliproxy.dll" was n原创 2013-11-22 17:16:56 · 1247 阅读 · 0 评论 -
dump analyze
0:000> !analyze -vFAULTING_IP: +000000000 ?? ???EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)ExceptionAddress: 00000000 ExceptionCode: 80000003 (Break instruc原创 2014-08-21 14:20:19 · 2679 阅读 · 0 评论 -
拷贝构造函数与赋值运算符的区别
拷贝构造函数在对象被创建时调用,赋值运算符只在已经存在的对象之间赋值时调用。string.h#include #include using std::cout;using std::endl;class String{public: String(const char *str = NULL); String(cons原创 2013-11-07 22:08:05 · 479 阅读 · 0 评论 -
值传递-引用传递-指针传递-函数调用时指针参数的传递 指针和引用的区别
在函数调用时,编译器如何处理形参变量和实参变量当发生函数调用时,需要给形参分配内存,形参变量是实参变量的副本, 在函数调用过程中是形参变量参与整个过程的变化1. 值传递void swap(int a, int b){ int tmp = a; a = b; b = tmp;}int main(){ int a = 1;原创 2013-05-18 10:18:30 · 810 阅读 · 0 评论 -
构造函数与析构函数中抛出异常
1.在构造函数中抛出异常,由于对象没有完全构造,所以不会调用析构函数,如果在构造函数中动态分配内存,就会产生内存泄露,通常,我们在构造函数中只做基本的初始化,如果需要复杂的初始化,我们一般会编写Init(),在构造函数中调用Init(),并通过UnInit()处理异常,这时候,往往会在UnInit()和析构函数发生代码重复,为了使代码结构更优美,最好采用智能指针。exception....原创 2013-09-12 21:57:21 · 766 阅读 · 0 评论 -
Little Endian, Big Endian, 网络字节序
字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。Little Endian还是Big Endian与操作系统和芯片类型都有关系。Motorola的PowerPC系列CPU和Intel的x86系列CPU; PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。(1)Little endian:原创 2016-08-15 16:00:21 · 1783 阅读 · 0 评论 -
链式前向星+拓扑排序+最短路径(Dijkstra+Floyd+Bellman-Ford+SPFA)
最短路径算法通常依赖于一个性质,一条两结点间的最短路径包含路径上的其他的最短路径。Dijkstra算法不允许图中存在负权边1.单源最短路径:从某点s到其他所有结点的最短路径2.松弛技术:松弛边(u,v),检测当前从s到v的最优路径是否有必要经过s到u,如有必要,则取边(u,v)G = (V,E) where V is a set of vertices and E is a...............原创 2014-07-09 14:18:51 · 1835 阅读 · 0 评论 -
shared_ptr三个陷阱
shared_ptr 存储一个指向动态分配对象的指针。在最后一个 shared_ptr 所指向的对象被销毁或重置时,要保证它所指向的对象被删除1. shared_ptr不能多次引用同一原始指针错误:当p1,p2离开作用域时,由于p1,p2的引用计数都为0,会导致两次释放同一块内存#include #include using std::tr1::shared_p原创 2015-01-20 13:07:40 · 979 阅读 · 0 评论 -
基类指针指向派生类对象
成员函数一般化三个结论#include using std::cout;using std::endl;class Employee{public: void Work() { cout };class Dev : public Employee{public: void Work() { cout };原创 2013-08-05 09:42:51 · 4057 阅读 · 0 评论 -
霍夫曼编码
霍夫曼编码算法:按父节点频度的递增序排序最小优先队列的内容,合并具有最低频度数的两棵树为一棵新的二叉树,其父节点频度为其二个子节点的频度之和,重复此过程,直到得到最终的小根堆。#include #include #include #include #include #include using std::cout;using std::endl;us原创 2014-06-04 16:04:30 · 933 阅读 · 0 评论 -
(3)单线程内存池--可变大小的内存管理器
#include #include using std::cout;using std::endl; 可变大小的内存空间列表class MemoryChunk{public: MemoryChunk(MemoryChunk *nextChunk, size_t chunkSize);原创 2014-02-25 11:11:27 · 728 阅读 · 0 评论 -
c++ 4种类型转换
1.static_cast ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:(1)用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安原创 2013-11-18 17:44:15 · 958 阅读 · 0 评论 -
(2)单线程内存池--固定大小对象的内存池
如果内存池将管理某一类型的可用对象池,模板实现将允许我们灵活地改变所管理的特定对象#include #include using std::cout;using std::endl;template class MemoryPool{public: MemoryPool(size_t size = EXPANSION_SIZE);原创 2014-02-24 15:07:44 · 504 阅读 · 0 评论 -
(1)单线程内存池---专用Rational内存管理器
为避免频繁地使用默认内存管理器,Rational类要维护一个预先分配的Rational对象的静态链表,该表列出空闲的可用对象。当需要Rational对象时,可以从空闲列表中取出一个,使用后在把它放回空闲列表中以便今后分配 Rational 对象的空闲列表 #include #include using std::co原创 2014-02-24 13:23:12 · 528 阅读 · 0 评论 -
算法设计与分析基础学习笔记--第一章
第一章欧几里德算法又称辗转相除法,用于计算两个整数a, b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)证明:(1)假设d是a,b的一个公约数,a可以表示成a = kb + r,则r = a % b,则有d|a, d|b, 而r = a - kb,故 d|r,因此d是原创 2018-01-16 15:57:10 · 356 阅读 · 0 评论