C++
The Laughing Uncle
专业踩各种坑
展开
-
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 · 1261 阅读 · 1 评论 -
C++ 捕捉 crash 信号(win&Linux)
目录Win函数说明具体例子Linux具体例子作为一个程序员,必现的 bug 容易排查,最怕遇见非必现 bug,尤其是那种在自己环境上测多少次都没问题,到用户环境偶尔会 crash,无从下手,让人瞬间抓狂。并且像这种非必现 bug 一般很难采用日志的方式来定位。又或者是那种当程序 crash 的时候,想要做一些操作今天做项目遇到了这种问题,特此记录一下Winwindows 实际上已经提供了可以捕捉异常信号的方法 SetUnhandledExceptionFilter() ,当程序 crash 的时候原创 2020-12-12 20:15:01 · 2091 阅读 · 0 评论 -
C++中为什么析构函数是虚函数
析构函数为什么是虚函数虚构函数是虚函数的情况只需要在特定场景下出现即可,正常情况下不必要弄成虚函数。如果基类的析构函数不是虚函数,在特定情况下会导致派生来无法被析构。情况1:用派生类类型指针绑定派生类实例,析构的时候,不管基类析构函数是不是虚函数,都会正常析构情况2:用基类类型指针绑定派生类实例,析构的时候,如果基类析构函数不是虚函数,则只会析构基类,不会析构派生类对象,从而造成内存泄漏。...原创 2019-08-22 10:23:39 · 1948 阅读 · 0 评论 -
C++ 虚拟继承问题
文章目录前言为什么要有虚拟继承虚拟继承和普通继承的区别虚拟继承 sizeof() 问题前言本篇文章主要描述虚拟继承中内存分布情况,当然,可能会不太完全正确,希望大家多多指正为什么要有虚拟继承我们看下面一种情景:class A{public: int a;};class B : public A{public: int b;};class C : public A...原创 2019-08-19 21:19:53 · 9583 阅读 · 1 评论 -
C++ 异常
文章目录前言概念异常使用异常抛出捕获匹配规则异常栈展开原则异常的重新抛出异常安全问题基类、派生类异常问题捕获异常使用引用的原因异常的优缺点优点:缺点:总结:前言在C语言中,我们使用的处理错误的几种方式:终止错误:assert(),但出现某些错误就会导致程序直接终止,比如,内存问题返回错误码。但需要我们自己去寻找错误原因C++标准库中的setjmp和longjmp。说实话,这个基本不用...原创 2019-08-19 15:40:39 · 441 阅读 · 0 评论 -
C++ 获取磁盘盘符以及剩余空间
void test2(){ DWORD dwLen = GetLogicalDriveStrings(0, NULL); //获取系统字符串长度. char * pszDriver = new char[dwLen]; //构建一个相应长度的数组. GetLogicalDriveStrings(dwLen, pszDriver); //获取盘符字符串. v...原创 2019-08-14 09:32:14 · 7475 阅读 · 0 评论 -
C++ 调用cmd的几种方法
文章目录systemWinExecShellExecute阻塞式调用ShellExecute如何调用winsat(解决应用程序重定向问题)任务计划程序调用cmd来执行响应的命令,windows实际上也给了一些接口,但是有些在执行某些命令的时候,却不能够执行,比如 winsat。system这个命令使用 VS 的同学一定不陌生当我们想要执行某个命令或打开某个程序时 system("c...原创 2019-08-09 09:17:35 · 17264 阅读 · 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 · 3938 阅读 · 0 评论 -
C++ 揭开STL空间配置器的神秘面纱
文章目录什么是空间配置器为什么要有空间配置器空间配置器的基本框架空间配置器的原理一级空间配置器二级空间配置器内存池哈希桶空间申请的流程1.前期准备2.申请空间3.往哈希桶中填充内存块4.向内存池中索要空间5.空间回收常见的问题什么是空间配置器顾名思义,就是帮助各个容器来管理空间的(空间的申请与释放)。虽然但多数情况下我们不会直接使用到空间配置器(比如vector,list都是有空间配置器的,只...原创 2019-04-07 19:22:10 · 329 阅读 · 1 评论 -
模拟实现vector
vector是C++ STL中一个非常重要的容器,了解 vector 的底层实现原理,可以很好的帮助我们更加熟练的使用vector。首先,考虑一个vector类的成员变量:_start、_end、_endOfCapacity,有这三个,我们就可以知道vector的size、capacity,以及进行各种操作 template <class T> class vector { ...原创 2019-02-25 18:01:49 · 255 阅读 · 0 评论 -
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 · 6333 阅读 · 1 评论 -
详解C++类中的六个默认成员函数
文章目录构造函数特点析构函数特点拷贝构造函数特点赋值运算符重载特点const&及const &重载在C++98中,如果一个类中什么都没有,简称为空类,系统会自动生成六个默认的成员函数,构造函数、析构函数、拷贝构造函数、赋值运算符重载、&操作符重载、const,在C++11中又加入了控制默认函数(=default , =delete)首先,大致了解一下六个默认构造函数...原创 2018-11-30 16:17:22 · 2552 阅读 · 3 评论 -
C++ 引用
文章目录引言概念引言我们在生活中,会经常给我们的同学起别名,俗称外号,比如给张三同学起名叫狗蛋,当别的同学叫狗蛋,张三就知道是叫他,就会回应。C++的发明者就是通过生活中的这个例子提出了引用的概念。概念引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型& 引用变量名(对象名) = 引用实体 //ra就是a的引用,也是a的别名...原创 2018-11-24 20:37:50 · 128 阅读 · 0 评论 -
C++ 函数重载
文章目录引言什么是函数重载为什么要有函数重载使用函数重载的注意事项(名字修饰)为什么返回值类型不同不属于函数重载?名字修饰(Name Mangling)C语言名字修饰C++名字修饰总结引言什么是函数重载之前看到过这样一个段子:一个商场中保洁阿姨刚拖完地,为了防止顾客摔倒,于是写下了“小心地滑”。这时候以为老外走了过来,看见了这个警告,就非常小心翼翼地滑了过去。在日常生活中,一个词有多重...原创 2018-11-22 15:28:51 · 218 阅读 · 0 评论