
C++
liangjisheng
https://github.com/liangjisheng
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
windows环境下unistd.h缺失解决方法
#ifndef _UNISTD_H#define _UNISTD_H#include <io.h>#include <process.h>#endif /* _UNISTD_H */转载 2018-11-30 15:47:45 · 1911 阅读 · 0 评论 -
堆栈溢出
当你在一个函数里面定义的局部变量所占的空间太大的话,超过了栈帧的大小,当你在运行程序的时候,就会报堆栈 溢出的错误。此时一个办法就是使用指针,使其内存分配在堆上;另外的话,如果在你自己的工程中的话,有一个或者 两个重要的类的话,可以将用类定义一个全局对象,也可以解决堆栈溢出的问题。原创 2017-08-02 11:37:54 · 741 阅读 · 0 评论 -
内存不足
遇到了一个内存不足的问题后面就是堆栈溢出了原创 2017-08-01 17:07:14 · 430 阅读 · 0 评论 -
停用的当前上下文对当前执行线程来说不是活动的
就是这个问题原创 2017-07-21 17:53:30 · 689 阅读 · 0 评论 -
IO流,文件流
C++中流的类系图转载 2017-07-20 20:24:22 · 217 阅读 · 0 评论 -
检查和消除内存泄露
http://blog.csdn.net/kingstar158/article/details/6549248转载 2017-07-20 19:41:20 · 288 阅读 · 0 评论 -
Run-Time Check Failure #2搜索 - Stack around the variable 'buff' was corrupted.
这种情况一般是由内存访问越界造成的,比如数组越界,memset,memcpy,等内存操作函数。 此处的size是一个variable,即,变量,下面将出错的代码贴出 // 将文件读入内存,返回内存指针与文件的大小bool GetFileToMemory( const char *pFilename, char* &pContent, int &si转载 2017-07-06 14:14:51 · 1182 阅读 · 0 评论 -
test_memoryLeak
#include <vld.h>#include <iostream>using namespace std;int main(){ int *pInt = new int[10]; for(int i = 0; i < 10; i++) { pInt[i] = 0; cout << pInt[i] << endl; }原创 2017-07-06 12:53:31 · 344 阅读 · 0 评论 -
Heap Corruption
首先说明一下什么是Heap Corruption。当输入超出了预分配的空间大小,就会覆盖该空间之后的一段存储区域,这就 叫Heap Corruption。这通常也被用作黑客攻击的一种手段,因为如果在该空间之后的那段存储区域如果是比较重要的 数据,就可以利用Heap Corruption来把这些数据修改掉了,后果当然可想而知了。在VC里面,用release模式编译运行程序的时候,堆分配(Heap转载 2017-07-06 10:45:38 · 798 阅读 · 0 评论 -
进程间通信
FAQ1: 管道与文件描述符,文件指针的关系? 答: 其实管道的使用方法与文件类似,都能使用read,write,open等普通IO函数. 管道描述符来类似于文件描述符. 事实上, 管道使用的描述符, 文件指针和文件描述符最终都会转化成系统中SOCKET描述符. 都受到系统内核中SOCKET描述符的限制. 本质上LINUX内核源码中管道是通过空文件来实现.FAQ2: 管道的使用方法?原创 2017-06-10 10:18:04 · 276 阅读 · 0 评论 -
socket同步异步阻塞非阻塞
在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞 四种调用方式。这些方式彼此概念并不好理解。 下面是我对这些术语的理解。同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前, 该调用就不返回。按照这个定义,其实绝大多数函数都是 同步调用(例如sin, isdigit等)。但是一般而言,我们在说 同步、异步的时候,特指那些需要其他部件协作或者需要一定 时间完成的任务。最常见原创 2017-06-10 10:06:38 · 309 阅读 · 0 评论 -
virtual table(虚表)
我们可以通过__declspec(novtable)来告诉编译器不要生成虚表,ATL中大量应用这种技术来减小虚表的内存开销,class __declspec(novtable) A{public: void fun1(){ cout << "fun1"; } virtual void fun2() { cout << "fun2"; } virtual ~A() {}原创 2017-06-09 11:26:36 · 1543 阅读 · 1 评论 -
pointer_1
#include <iostream>using namespace std;class A{public: A(); ~A(); void SetNextPtr(A *ptr) { pNext = ptr; }private: double m_d1; A *pNext; };A::A(){ pN原创 2017-06-04 15:50:40 · 306 阅读 · 0 评论 -
字符统计
// Hash表是使用 O(1)时间进行数据的插入、删除和查找,// 但是 hash 表不保证表中数据的有序性,这样在 hash // 表中查找最大数据或者最小数据的时间是 O(N) 。// 字符串中完成过滤重复字符的功能,// 输入:1.常字符串;2.字符串长度;3.【out】用于输出过滤后的字符串.// 输出:过滤后的字符串。// 思路1, 循环判定法。// 第1步,先记录字符串中第1原创 2017-06-01 07:53:17 · 395 阅读 · 0 评论 -
数字统计
// 统计一个整数序列中数字出现的次数#include <iostream>#include <ctime>#include <cstdlib>#include <map>using namespace std;int main(){ srand(time(0)); int arr[30] = {0}; int hashTable[30] = {0}; for(原创 2017-06-01 07:52:43 · 507 阅读 · 0 评论 -
C++编程规范
// C++编程规范// 头文件保护// 所有的头文件都应该使用#define防止头文件被多重包含(multiple inclusion)// 命名格式为<PROJECT>_<PATH>_<FILE>_H_,为保证唯一性,头文件的命名应基于// 所在项目原代码树的全路径// 头文件依赖// 使用前置声明(forward declarations)尽量减少.h 文件中#include的数量。原创 2017-05-31 21:33:13 · 377 阅读 · 0 评论 -
parallel_for_each
// print_array complie with: /EHsc#include <ppl.h>#include <array>#include <algorithm>#include <iostream>using namespace Concurrency;using namespace std;using namespace std::tr1;int main(){原创 2017-05-29 11:14:29 · 2437 阅读 · 0 评论 -
OpenMP threadprivate
// threadprivate编译指导语句使一个全局文件作用域的变量在并行域内变成// 每个线程私有,每个线程对该变量复制一份私有拷贝int alpha[10], beta[10], i; #pragma omp threadprivate(alpha) int main () { // 第一个并行区域 #pragma omp parallel private(i,beta原创 2017-05-29 10:37:05 · 1777 阅读 · 0 评论 -
string find
#include <iostream>#include <vector>#include <string>#include <tchar.h>#include <string.h>using namespace std;/************************************************************************//* 查找一个字符在一原创 2017-07-26 16:51:10 · 243 阅读 · 0 评论 -
error C2360: initialization of 'j' is skipped by 'case' label
switch case 分支结构里面,你不能直接在case分支里面定义变量,要么定义到case外面,要么在case分支下面加一个大括号 这样就可以避免上述错误原创 2017-07-27 19:48:26 · 1255 阅读 · 0 评论 -
内存泄露检测工具
http://www.cnblogs.com/little-mat/articles/2183075.html http://www.xdowns.com/article/170/Article_3060.html转载 2017-08-26 15:54:06 · 262 阅读 · 0 评论 -
Windows下Protobuf的静态库编译和使用说明(验证成功)
下载 protobuf 、cmake https://github.com/google/protobuf/releases https://cmake.org/downl转载 2018-11-30 12:14:00 · 1363 阅读 · 0 评论 -
你所不知道的C和C++运行库
&nb转载 2018-05-30 17:09:06 · 765 阅读 · 0 评论 -
带你玩转Visual Studio——结局汇总
感谢这一系列文章陆陆续续写了一个月,也差不多可以告一个段落了。感谢读者们一直以来对我关注和支持!现将这一系列文章在这做一个汇总,以方便大家查阅。若是初学者,建议按顺序阅读。系列文章目录带你玩转Visual Studio——开篇介绍带你玩转Visual Studio——带你新建一个工程带你玩转Visual Studio——带你...转载 2018-03-06 17:52:17 · 186 阅读 · 0 评论 -
c++中的继承、聚合、关联和组合
一、继承、关联和组合继承和组合是两个完全不同的概念继承,表达的是“is-a”的关系,两者之间是一种上下级的关系,比如,我们说“human is a animal“(人是动物的一种,换句话说,动物是人的上级),要表达这种关系,就可以使用继承1234calss animal{};classhuman : publicanimal // 继承...转载 2018-03-22 16:10:54 · 582 阅读 · 0 评论 -
使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...转载 2018-03-22 16:09:30 · 212 阅读 · 0 评论 -
C++ gmp大数运算库 window下配置使用
上一篇讲了gmp的安装配置,这一篇就来讲讲其具体的使用。GMP 的主要目标应用领域是密码学的应用和研究、 互联网安全应用、 代数系统、 计算代数研究等。其详细的用法可以参考官方使用手册:https://gmplib.org/gmp-man-6.1.0.pdf,里面详细的介绍了gmp的用法。现在下面就简单的总结一下基本的用法:添加头文件:#include <gmp.h...转载 2018-02-28 14:07:19 · 1798 阅读 · 0 评论 -
c++ gmp大数运算库 window下配置使用
GMP大数运算库,是一个开源的数学运算库,它可以用于任意精度的数学运算,包括有符号整数、有理数和浮点数。它本身并没有精度限制,只取决于机器的硬件情况。GMP 的主要目标应用领域是密码学的应用和研究、 互联网安全应用、 代数系统、 计算代数研究等。详细的可以参考官网:https://gmplib.org/下面是在window下安装配置GMP的过程:1、首先是安装MinGW,...转载 2018-02-28 14:00:29 · 3102 阅读 · 0 评论 -
dll导出接口
最近做了一个dll,我使用是C方式导出的,但是在定义接口的时候使用了C++中的string,导致我的debug的exe调用不了 Release的dll,后来我使用了C风格的字符串,结果成功导出,并且debug的exe成功的调用了Release的dll。 在编译的时候,编译器给出过警告,说我导出的接口与C风格的字符串不相符,当时也没在意,以后一定要注意, 不要忽略编译器给出的警告信息,一切警告信原创 2017-09-29 15:43:30 · 576 阅读 · 0 评论 -
依赖倒置原则
在面向过程编程时,通常的做法是高层模块调用底层模块,其目的之一就是要定义子程序的 程序结构。当高层模块依赖于底层模块时,对底层模块的改动会直接影响高层模块,从而迫使 他们依次作出修改。如果高层模块独立于低层模块,则高层模块更容易重用,这就是分层架构 设计的核心原则,即依赖倒置原则: 高层模块不应该依赖低层模块,两者都应该依赖于抽象接口 抽象接口不应该依赖于细节,细节应该依赖抽象接口 当在原创 2017-09-29 09:21:29 · 352 阅读 · 0 评论 -
本地图片http上传服务器
http://www.cnblogs.com/hoodlum1980/archive/2012/05/28/2521500.html http://www.cnitblog.com/luckydmz/archive/2010/10/12/69959.html http://blog.csdn.net/sandro_zhang/article/details/7616588 http://blo转载 2017-09-03 12:55:41 · 780 阅读 · 0 评论 -
Http服务器实现文件的上传与下载
http://www.cnblogs.com/liferecord/p/4842153.html转载 2017-09-27 09:22:39 · 5899 阅读 · 0 评论 -
隐藏与覆盖
函数隐藏与覆盖是两个不同的概念,隐藏是一个静态概念,代表了标识符之间的一种屏蔽现象 而覆盖则是为了实现动态联编,是一个动态概念。但隐藏和覆盖也有联系:形成覆盖的两个 函数之间一定形成隐藏,例如可以对虚函数采用实调用(也就是说,尽管被调用的是虚函数 但被调用函数的地址是在编译阶段静态确定的),那么派生类中的虚函数任然形成对基类中 虚函数的同名隐藏 在设计类的时候,要避免在派生类中重新定义基类原创 2017-09-10 11:21:13 · 401 阅读 · 0 评论 -
理解构造函数、析构函数、赋值操作符函数不能被继承
从程序实现的角度来看,在一类中定义的属性和行为,如果被派生类继承,派生类就不用再次定义 这些属性和行为,而派生类对象可以表现出与基类相同的属性和行为,对于类的构造函数来说,它的 语义是为类对象进行初始化,而这是不可能的,同样也不能利用基类的析构函数来销毁一个派生类 对象,不能利用基类的赋值操作符函数完成派生类对象之间的赋值操作 同样基类中声明的成员函数或友员函数或友员类永远只能是基类的友员,原创 2017-09-09 17:00:07 · 538 阅读 · 0 评论 -
exe 32 or 64
首先介绍PE结构Windows系统下的可执行文件,是基于Microsoft设计的一种新的文件结构,此结构被称之为PE结构。PE的意思是Portable Executable(可移植的执行体),所有Win32执行体都是用PE文件格式,其中包括SYS、DLL、EXE、COM、OCX等。(不管是学习逆向、破解还是安全,了解PE文件格式都是非常必要的。)PE文件的第一个部分是IMAGE_DOS_HEADER转载 2017-09-25 18:59:54 · 443 阅读 · 0 评论 -
本地化设置
http://blog.csdn.net/nodeathphoenix/article/details/7736259转载 2017-08-30 16:19:47 · 501 阅读 · 0 评论 -
代码重用
下面介绍一些代码重用的几个具体原则或手段 1模块功能单一化,模块功能要单一,在模块中要使用某些有别的模块的代码产生的数据时 不要直接调用其它模块中定义的函数,而是利用参数的形式将数据从外部传递过来,从而 使模块尽量减少对其他模块的依赖,保持功能单一 2头文件尽量减少包含其它头文件,将有可能包含的头文件从.h文件中转移到.cpp文件中去 另外在类的数据成员中使用其它类或者函数的参数是用户自定原创 2017-09-24 15:59:35 · 3455 阅读 · 0 评论 -
OpenMP Atomic
// Barrier指导语句——barrier指导语句用来同步一个线程组中所有的线程,先到达的线// 程在此阻塞,等待其他线程。barrier语句最小代码必须是一个结构化的块,而不能只// 是一个单行的指导语句。barrier语句的格式为: // #pragma omp barrier newline // 正确用法// if(x != 0)// {// #pragma om原创 2017-05-29 10:34:32 · 1845 阅读 · 0 评论 -
OpenMP critical
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int maxnum1 = -1;#pragma omp parallel for for(int i = 0; i < 10; i++)#pragma omp critical(maxnum1) if(arr[i] > maxnum1)原创 2017-05-29 10:33:16 · 545 阅读 · 0 评论 -
parallel lock
// 互斥锁// void omp_init_lock(omp_lock_t*); // 初始化一个互斥锁// void omp_destroy_lock(omp_lock_t*); // 结束一个互斥锁的使用并释放内存// void omp_set_lock(omp_lock_t*); // 获得一个互斥锁// void omp_unset_lock(omp_lock_原创 2017-05-29 09:35:58 · 342 阅读 · 0 评论