自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++ 利用 windbg + dump + map + cod 文件分析 crash 原因

目录如何生成 dump 文件如何生成 map 文件VS生成cmake 命令如何生成 cod 文件VS 生成cmake 命令找 crash 地址step 1step2step3附写代码路上踩过的坑,特此记录,以免忘记网上全部都是有 pdb 文件。Release 没有 pdb 文件。本文适用于没有 pdb 文件,如何定位如何生成 dump 文件作为一个程序员,必现的 bug 容易排查,最怕遇见非必现 bug,尤其是那种在自己环境上测多少次都没问题,到用户环境偶尔会 crash,无从下手,让人瞬间抓狂。并

2020-12-12 21:27:33 1165 1

原创 C++ 捕捉 crash 信号(win&Linux)

目录Win函数说明具体例子Linux具体例子作为一个程序员,必现的 bug 容易排查,最怕遇见非必现 bug,尤其是那种在自己环境上测多少次都没问题,到用户环境偶尔会 crash,无从下手,让人瞬间抓狂。并且像这种非必现 bug 一般很难采用日志的方式来定位。又或者是那种当程序 crash 的时候,想要做一些操作今天做项目遇到了这种问题,特此记录一下Winwindows 实际上已经提供了可以捕捉异常信号的方法 SetUnhandledExceptionFilter() ,当程序 crash 的时候

2020-12-12 20:15:01 1978

原创 C++中为什么析构函数是虚函数

析构函数为什么是虚函数虚构函数是虚函数的情况只需要在特定场景下出现即可,正常情况下不必要弄成虚函数。如果基类的析构函数不是虚函数,在特定情况下会导致派生来无法被析构。情况1:用派生类类型指针绑定派生类实例,析构的时候,不管基类析构函数是不是虚函数,都会正常析构情况2:用基类类型指针绑定派生类实例,析构的时候,如果基类析构函数不是虚函数,则只会析构基类,不会析构派生类对象,从而造成内存泄漏。...

2019-08-22 10:23:39 1922

原创 C++ 虚拟继承问题

文章目录前言为什么要有虚拟继承虚拟继承和普通继承的区别虚拟继承 sizeof() 问题前言本篇文章主要描述虚拟继承中内存分布情况,当然,可能会不太完全正确,希望大家多多指正为什么要有虚拟继承我们看下面一种情景:class A{public: int a;};class B : public A{public: int b;};class C : public A...

2019-08-19 21:19:53 9349 1

原创 C++ 异常

文章目录前言概念异常使用异常抛出捕获匹配规则异常栈展开原则异常的重新抛出异常安全问题基类、派生类异常问题捕获异常使用引用的原因异常的优缺点优点:缺点:总结:前言在C语言中,我们使用的处理错误的几种方式:终止错误:assert(),但出现某些错误就会导致程序直接终止,比如,内存问题返回错误码。但需要我们自己去寻找错误原因C++标准库中的setjmp和longjmp。说实话,这个基本不用...

2019-08-19 15:40:39 424

原创 软件静默安装

最近做一个项目,其中需要使用到一个第三方工具,需要进行安装,但又不能弹出界面,就必须静默安装。。经大佬指点,使用工具 Silent Install Builder 即可。Silent Install Builder1. 安装上面有链接,下载安装即可2. 操作界面是这样点击:Create Silent Installation (中间那个)就可以选择你要静默安装程序的安装包位置然...

2019-08-17 09:55:18 12986 1

原创 C++ 获取磁盘盘符以及剩余空间

void test2(){ DWORD dwLen = GetLogicalDriveStrings(0, NULL); //获取系统字符串长度. char * pszDriver = new char[dwLen]; //构建一个相应长度的数组. GetLogicalDriveStrings(dwLen, pszDriver); //获取盘符字符串. v...

2019-08-14 09:32:14 7314

原创 C++ 调用cmd的几种方法

文章目录systemWinExecShellExecute阻塞式调用ShellExecute如何调用winsat(解决应用程序重定向问题)任务计划程序调用cmd来执行响应的命令,windows实际上也给了一些接口,但是有些在执行某些命令的时候,却不能够执行,比如 winsat。system这个命令使用 VS 的同学一定不陌生当我们想要执行某个命令或打开某个程序时 system("c...

2019-08-09 09:17:35 16062 1

原创 C++ 移动文件(大文件移动 IFileOperation::MoveItem)

由于今天使用windows提供的 MoveFile 移动文件出现问题,特此总结。MoveFile这是windows提供的一个API。用法比较简单,并且可以移动文件夹下面子文件。 //将C盘中的test文本移动到D盘 MoveFile("C:\\test.txt", "D:\\test.txt");原型 BOOL MoveFile( LPCTSTR lpExistingFileN...

2019-08-05 12:10:28 3832

原创 Windows获取系统的开机时长

在网上看了很多教程,基本上都是获取系统的开机时间,而不是开机时长。360虽然可以获取到开机时长,但是这个计算方法是不准确的,并且程序员获取不到这个数据。话不多说,直接上干货。方法一:采用windows自带的事件查看器步骤:“事件查看器---->windows日志---->系统---->筛选---->6013”注:6013是事件ID上述记录的有。但这是系统的,我们...

2019-07-23 11:39:03 4516

原创 Linux 五种IO模型(形象生动的例子)

文章目录引言阻塞IO非阻塞IO信号驱动IO多路复用/多路转接IO异步IO总结引言在学习五种IO模型之前,我们先看这样一个例子:大家都钓过鱼吧,钓鱼最主要的步骤实际就两个:1. 等2. 拉杆。 钓鱼的时候你会发现有这样几种人:张三(此人比较沉闷安静):就一直紧紧盯着鱼钩,一动不动,谁也不理,有鱼就拉杆李四(此人生性活泼好动):在等鱼的时候,一会去找张三聊天,“嘿,哥们,钓几条鱼了”,张三...

2019-05-28 21:31:35 251

原创 C++ 揭开STL空间配置器的神秘面纱

文章目录什么是空间配置器为什么要有空间配置器空间配置器的基本框架空间配置器的原理一级空间配置器二级空间配置器内存池哈希桶空间申请的流程1.前期准备2.申请空间3.往哈希桶中填充内存块4.向内存池中索要空间5.空间回收常见的问题什么是空间配置器顾名思义,就是帮助各个容器来管理空间的(空间的申请与释放)。虽然但多数情况下我们不会直接使用到空间配置器(比如vector,list都是有空间配置器的,只...

2019-04-07 19:22:10 321 1

原创 C++ LZ77压缩

文章目录引言压缩过程如何找最长匹配暴力求解哈希桶如何区分源文件还是(距离,长度)压缩文件中的内容解压缩遇到的问题源码引言lz77压缩是基于字典做数据压缩的方法,由以色列的两位大神Jacob Ziv与Abraham Lempel在1977年提出,LZ77算法名字就取于这两个人的名字,77表示是1977年提出压缩过程LZ77是通过字节来对文件进行压缩,就是将源文件中重复的字节通过(距离,长...

2019-03-29 22:29:24 1360

原创 Linux 死锁的产生及其避免方法

文章目录引言何谓死锁死锁产生的四个条件死锁的预防避免死锁引言我们看一个场景---------哲学家吃饭的故事哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。当他们饿的时候就必须吃饭,每个人只能使用自己左右手两边的筷子,哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉,永远都在等右边的餐叉(或者相反)...

2019-03-17 14:07:36 1312

原创 模拟实现vector

vector是C++ STL中一个非常重要的容器,了解 vector 的底层实现原理,可以很好的帮助我们更加熟练的使用vector。首先,考虑一个vector类的成员变量:_start、_end、_endOfCapacity,有这三个,我们就可以知道vector的size、capacity,以及进行各种操作 template <class T> class vector { ...

2019-02-25 18:01:49 247

原创 C++ Huffman树实现文件的压缩与解压

前言Huffman树在数据结构的时候都了解过,由Huffman树可以生成huffman编码,而Huffman编码在解决文件压缩问题的时候还是一个比较经典的算法。Huffman树 ?定义:Huffman树,又称最优二叉树,是加权路径长度最短的二叉树生成Huffman树假设有这样一组权值 1,3,5,7,Huffman树构建过程如下:生成Huffman编码Huffman树中左子树路径...

2019-02-23 19:25:22 3103 3

原创 如何修改Linux系统的时间、时区

很多装过Linux系统的人有着样的经历,就是Linux的时间和自己主机上的时间不一致。这是因为在安装Linux系统是采用了UTC,所谓UTC就是国际标准,可以理解为就是0时区的时间,而中国处于UTC+8时区,所以时间会不一样。那么如何修改尼?我们先看几个常用关于时间的命令date命令 # date //显示系统时间hwclock命令 # hwclock //显示硬件时间 ...

2019-01-14 15:26:27 2524 1

原创 C++之erase、remove 、remove_if的区别

文章目录eraseearse所存在的坑:remove对vector来说对于list来说remove_if对于vector而言对于list而言erase作用:删除内存擦除简单的说,就是能够从内存中擦除掉你想删除的元素函数原型:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( itera...

2018-12-16 22:03:08 6154 1

原创 详解C++类中的六个默认成员函数

文章目录构造函数特点析构函数特点拷贝构造函数特点赋值运算符重载特点const&及const &重载在C++98中,如果一个类中什么都没有,简称为空类,系统会自动生成六个默认的成员函数,构造函数、析构函数、拷贝构造函数、赋值运算符重载、&操作符重载、const,在C++11中又加入了控制默认函数(=default , =delete)首先,大致了解一下六个默认构造函数...

2018-11-30 16:17:22 2522 3

原创 LeedCode 第八题 模拟实现atoi(C语言)

请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽...

2018-11-26 17:19:09 213

原创 C++ 引用

文章目录引言概念引言我们在生活中,会经常给我们的同学起别名,俗称外号,比如给张三同学起名叫狗蛋,当别的同学叫狗蛋,张三就知道是叫他,就会回应。C++的发明者就是通过生活中的这个例子提出了引用的概念。概念引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型& 引用变量名(对象名) = 引用实体 //ra就是a的引用,也是a的别名...

2018-11-24 20:37:50 120

原创 C++ 函数重载

文章目录引言什么是函数重载为什么要有函数重载使用函数重载的注意事项(名字修饰)为什么返回值类型不同不属于函数重载?名字修饰(Name Mangling)C语言名字修饰C++名字修饰总结引言什么是函数重载之前看到过这样一个段子:一个商场中保洁阿姨刚拖完地,为了防止顾客摔倒,于是写下了“小心地滑”。这时候以为老外走了过来,看见了这个警告,就非常小心翼翼地滑了过去。在日常生活中,一个词有多重...

2018-11-22 15:28:51 206

原创 深入理解Linux的权限

例子当我们使用ls -al 查看文件内容的时候,会出现:可以看到,最后面蓝色的字体是我们访问目录下的文件名字,那前面的那些毫无疑问就是该文件的一些信息。我们可以看懂一些,比如创建的时间,剩余的部分是什么?最前面的一串字母:例drwxr-xr-x.表示的权限,那表示的又是谁的权限?所有人吗?还是仅仅root用户的?首先,最前面的字符d表示文件类型;当为[ d ]则是目录当为[ - ...

2018-11-10 20:10:13 261

原创 Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /boot,/etc,/dev,/run,/tmp及其作用

Linux文件系统层次结构如图所示:/proc (processes)目录存放了进程和系统的信息,可以在这个目录下获取系统的信息,这些信息是在内存中,由系统自己产生的。proc是一个伪文件系统,它只存在内存当中,而不占用外存空间。也就是说,这个目录的内容不在硬盘上而是在内存里。用户和应用程序可以通过proc来获取系统的信息,并可以改变内核的某些参数,由于系统的一些信息,如进程,是动态变...

2018-11-06 20:41:19 935

原创 LeetCode 第六题 Z字形变换(C语言)

将字符串 “PAYPALISHIRING” 以Z字形排列成给定的行数:P   A   H   NA P L S I  I GY   I    R之后从左往右,逐行读取字符:“PAHNAPLSIIGYIR”实现一个将字符串进行指定行数变换的函数:enspstring convert(string s, int numRows);示例 1:输入: s = “PAYPALIS...

2018-11-05 17:48:53 2522

原创 LeetCode第五题:最长回文子串(C语言)

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: “babad”输出: “bab”注意: "aba"也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”解法一:暴力求解法思想:反转 S,使之变成 S’。找到 S 和 S’之间最长的公共子串,这也必然是最长的回文子串。理由:如果找两个字符串的公共子串,i指向第一...

2018-11-03 19:57:52 13507 2

原创 八大排序之归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。我们可以这样简单的理解:将一个数组分为两个数组arr1 arr2,假如这两个数组有序,再将这两个数组归并为一个数组,并确保归并后的数组也有序。关键就是如何让arr1 arr2有序,我们可以对这两个数组分别采用归并算法。以此类推 int arr[...

2018-11-02 20:50:01 138

原创 八大排序之快速排序

快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。通俗的说,就是先选一个标准值,比标准值小的放在左边,比标准值大的放在...

2018-11-02 19:53:02 256

原创 八大排序之堆排序

堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆排序比较简单先创建一个大堆(如何创建堆)将堆顶元素与最后一个元素换外置后,在进行向下调整再将堆顶元素与倒数第二个元素换位置,进行向下调整以此类推 void AdjustDown(int arr[], int size, int root) { if (root * 2 + 1 >= size...

2018-10-31 21:55:56 283

原创 八大排序之插入排序(直接插入排序 & 希尔排序)

文章目录插入排序直接插入排序二分插入排序希尔排序插入排序插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序可以分为直接插入排序和希尔排序。直接插入排序相信大家都玩过扑克牌(即使没玩过,也听说过)。当我们手里有第一张牌的时候,随便放当有第二张牌的时候,与第一张...

2018-10-31 21:23:41 166

原创 LeetCode 第三题(C语言)

给定一个字符串,找出不含有重复字符的最长子串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 无重复字符的最长子串是 “abc”,其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 无重复字符的最长子串是 “b”,其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 无重复字符的最长子串是 “wke”,其长度为 3。请注意,答案必须是...

2018-10-27 17:02:39 1881

原创 LeetCode第二题:两树相加(C语言)

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807对于这道题,正常情况下都可以考虑到,但会出现...

2018-10-25 21:43:34 290

原创 C语言实现2048游戏

2048游戏在很长一段时间内是一款很火的小游戏。游戏要求:最开始两个随机数每次生成一个随机数2或者4,生成4的概率是1/10键盘上下左右键控制游戏的走向当出现2048数字时,玩家获胜打印界面 //打印 void GamePrint(int row, int col) { printf("SCORE = %d", score); SetCurPos(0, 2); ...

2018-10-24 21:52:03 6918 2

原创 二叉搜索树相关操作及其应用

文章目录二叉搜索树查找递归查找非递归查找插入递归插入非递归插入删除二叉搜索树左孩子小于根节点右孩子大于根节点二叉排序树中序的结果是升序的 int arr[] = { 5, 3, 7, 1, 4, 6, 8, 0, 2, 9 }; typedef int Key; typedef struct BSTreeNode { Key key; struct BSTree...

2018-10-21 17:16:13 252

原创 堆及其相关操作

文章目录堆向下调整堆的创建大堆小堆堆的初始化堆顶元素堆的插入堆的删除向上调整TopK堆堆,也叫做二叉堆。目的:在堆中找到最值(最大值、最小值)      堆顶存放的不是最大值就是最小值堆是已数组的形式存储的,但在逻辑上是完全二叉树例如: int arr[] = { 53, 17, 78, 9, 45, 65, 87, 23, 31 };对应的堆为:注:上述堆还未进行调整ty...

2018-10-17 15:37:53 217

原创 镜像二叉树(递归/非递归)

镜像二叉树:根节点的左右孩子交换            所有节点的左右孩子都交换例如:递归递推公式:根节点的左子树和右子树换位置终止条件:空树 void MirrorTree(BNode *root) { if (root == NULL) { return; } BNode *tmp = root->left; root->left = ro...

2018-10-16 13:41:43 315

原创 前序、中序、后序递归、非递归方式打印二叉树

文章目录递归前序中序后序非递归前序中序后序递归前序 void PreOrder(BNode *root) { if (root == NULL) { return; } printf("%d ", root->data); //先打印根节点 PreOrder(root->left); //打印左子树 PreOrder(root->right)...

2018-10-15 19:14:02 1216 1

原创 二叉树结点、叶子结点个数,高度,第K层几个结点

文章目录结点个数叶子结点个数二叉树高度第K层几个结点二叉树的结点个数二叉树叶子结点个数二叉树第K层结点个数二叉树的高度在二叉树中,我们经常用到递归,再用递归的时候,经常会用到:递推公式,终止条件递推公式:如果左子树和右子树的结果都有了,按照这个二叉树有三个结点往下操作终止条件:递归一般都必须有终止条件,按照二叉树的五种基本形态考虑终止条件会比较简单一点最后就是要考虑递归函数中的...

2018-10-15 17:14:45 1666

原创 根据前序(后序)和中序遍历创建二叉树

根据前序和中序遍历创建二叉树根据后序和中序遍历创建二叉树注:如果仅仅知道三种遍历中的任何一种是无法准确还原一颗二叉树的前序和中序创建二叉树例如:对于这样的一颗二叉树,其相应的前序和中序遍历分别是:DataType preorder[] = { 1, 2, 4, 7, 3, 5, 6 };DataType inorder[] = { 4, 7, 2, 1, 5, 3, 6 };...

2018-10-15 16:53:54 641

原创 贪吃蛇

很多人都玩过贪吃蛇这个游戏,今天我们就来简单完成一个贪吃蛇的小游戏。首先,贪吃蛇有以下几个要求:只有一条蛇每次只出现一个食物蛇吃到食物长度会加1蛇撞到墙或者撞到自己,游戏结束一般情况下,写一些项目,会经常用到一种思想,MVC——Model(模型)-View(视图)-Controller(控制器),在Model里面通常会写一些游戏的所包含的各种事物的设计,例如:用结构体来表示蛇,食物·...

2018-10-10 19:35:39 563 3

sendmail-master.zip

linux平台下、C++语言写的基于465(SSL协议)端口以及25(TLS协议)端口的发送邮件代码。别的大佬写的,亲测可用

2020-05-28

贪吃蛇代码

这是博主贪吃蛇的代码,还不算完善,但基本功能都有。可供参考

2018-10-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除