自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 VS下如何调试程序

程序崩溃的原因分类函数栈溢出 一个变量未初化、未赋值,就读取它的值。 ( 这属于逻辑问题,往往是粗心大意的导致的 )函数栈溢出 (1)定义了一个体积太大的局部变量 (2)函数嵌套调用,层次过深(如无穷递归)数组越界访问 访问数组元素时,下标越界指针的目标对象不可用 (1)空指针 (2)野指针 指针未赋值free/delete释放了的对象不恰当的指针强制转换1 导言在软件开发周期中,测试和修正缺陷(...

2018-02-25 15:20:58 58385 4

原创 debug和release的区别

Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。     Debug版本包括调试信息,所以要比Release版本大很多(可能...

2018-01-02 20:00:08 19697

原创 C++ 堆和栈的区别 内存分配方式理解

栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。  堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没有释

2017-11-16 14:38:00 6464 1

原创 程序的内存分配之堆和栈的区别

堆栈概述  在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。要点: 堆,优先队列(priority queue);普通的队列是一种先进先出的数据结构(FIFO—First-In/Fi

2017-11-16 14:13:22 888

转载 c++ assert() 使用方法

ssert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#in

2017-11-16 13:41:57 538

原创 Linux中的shell到底是什么?

【一】 shell的含义: 首先shell的英文含义是“壳”; 它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核。 Linux中的shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息;【二】shell在Linux中的存在形式: 由于Linux不同于Win

2017-11-16 10:53:16 1248

原创 Linux系统目录结构以及简单说明

Linux系统目录结构以及简单说明 linux目录图:/root --- 启动Linux时使用的一些核心文件。如操作系统内核、引导程序Grub等。home --- 存储普通用户的个人文件ftp --- 用户所有服务httpdsambauser1user2bin --- 系统启动时需要的执行文件(二进制)sbin --- 可执行程序的目录,但大多存放涉

2017-11-16 10:43:24 299

转载 strcmp函数与strcpy函数

(一)strcmp函数           strcmp函数是比较两个字符串的大小,返回比较的结果。一般形式是:                   i=strcmp(字符串,字符串);         其中,字符串1、字符串2均可为字符串常量或变量;i   是用于存放比较结果的整型变量。比较结果是这样规定的:  ①字符串1小于字符串2,strcmp函数返回一个负值;②字符串1

2017-10-09 23:41:45 370

转载 const的用法

在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针。可以改变this所指向的值,但不能改变 this所保存的地址。在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针。既不能改变 this所指向的对象,也不能改变 this所保存的地址。  关键字:Const,Const函数,Const变量,函数后

2017-09-25 18:44:51 196

转载 数组指针和指针数组的区别

数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;    

2017-09-23 11:26:35 194

转载 关于HTTP协议,一篇就够了

HTTP简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信

2017-08-04 19:59:22 478

原创 Linux 通信机制 I/O多路复用之select

select 函数作用:系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就

2017-07-31 20:33:58 378 1

原创 -对比线程安全和可重入函数

线程安全一个函数被称为线程安全的(thread-safe),当且仅当被多个并发进程反复调用时,它会一直产生正确的结果。反之,如果一个函数不是线程安全的,我们就说它是线程不安全的(thread-unsafe)。所以,有这么四类函数称为线程不安全的:1、不保护共享变量的函数;2、函数状态随着调用改变的函数;3、返回指向静态变量指针的函数;4、调用线程不安

2017-06-10 15:18:23 366

原创 Linux 中的信号

1、基本概念 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。 收 到信号的进程对各种信号有不同的处理方法。处理方法可以分为三类:第一种是类似中断的处理程序,对于需要处理的信号,

2017-06-04 11:09:50 318

转载 数据结构――堆的基本概念及其操作

在我刚听到堆这个名词的时候,我认为它是一堆东西的集合...      但其实吧它是利用完全二叉树的结构来维护一组数据,然后进行相关操作,一般的操作进行一次的时间复杂度在  O(1)~O(logn)之间。      可谓是相当的引领时尚潮流啊(我不信学信息学的你看到log和1的时间复杂度不会激动一下下)!。      什么是完全二叉树呢?别急着去百度啊,要百度我帮你百

2017-05-03 20:50:24 833

转载 linux中fork()函数详解

一、fork入门知识     一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进

2017-05-02 22:52:30 318

翻译 Linux系统结构详细解读

我以下图为基础,说明Linux的架构(architecture)。(该图参考《Advanced Programming in Unix Environment》)最内层是硬件,最外层是用户常用的应用,比如说firefox浏览器,evolution查看邮件,一个计算流体模型等等。硬件是物质基础,而应用提供服务。但在两者之间,还要经过一番周折。还记得Linux启动。Linux首

2017-04-22 10:34:12 1107

原创 g++与gcc的区别

一:gcc与g++比较编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而 c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern "C",分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意

2017-04-08 10:45:37 418

转载 二叉树的线索化详解

首先,什么是二叉树的线索化,为什么要对二叉树线索化?二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息n个节点的二叉树中含有n+1个空指针

2017-04-07 10:25:21 1686

原创 C++ 详解深贝与浅拷贝

当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数:(1)一个对象以值传递的方式传入函数体 (2)一个对象以值传递的方式从函数返回 (3)一个对象需要通过另外一个对象进行初始化。如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一

2017-04-07 09:49:15 318

翻译 非递归实现二叉树的遍历

1、先序遍历基本思想:1>首先定义一个栈,每遇到一个节点,就对其数据进行访问;然后将其入栈,将当前节点的左孩子赋给它,循环此过程,直到最左节点被访问并被压入栈中。2>出循环后用临时变量保存栈顶节点,然后对栈顶节点进行出栈操作,到此说明当前节点以及其左子树已被访问过了。3>将临时变量的右孩子赋给当前节点,用子问题的方式去访问其右子树。[

2017-03-30 21:07:53 214

翻译 拷贝构造函数相关知识总结

在C++中,下面三种对象需要调用拷贝构造函数!1. 对象以值传递的方式传入函数参数[c-sharp] view plain copyclass CExample   {  private:   int a;    public:   //构造函数   CExample(int b)   {     a = b;

2017-03-14 21:45:04 264

转载 STL 关联式容器 Set与Map的用法

C++的标准模板库(简称STL)是一个容器和算法的类库。容器往往包含同一类型的数据。set是一种关联式容器,其特性如下:set以RBTree作为底层容器所得元素的只有key没有value,value就是key不允许出现键值重复所有的元素都会被自动排序不能通过迭代器来改变set的值,因为set的值就是键定义一个元素为整数的集合a,可以用set a;

2017-02-15 23:41:16 500

转载 C++模板template用法总结

引言模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。函数模板在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下:void swap(int&a , int& b) { int temp = a

2017-02-15 12:37:41 118939 8

转载 栈和队列的区别

简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据

2016-11-29 12:05:17 462

原创 斐波那契数列和二分查找的算法(递归与非递归)

#include using namespace std;long long fibonacci1(size_t n)//非递归算法{long long* fiboarry = new long long[n + 1];fiboarry[0] = 0;fiboarry[1] = 1;for (size_t i = 2; i {fiboarry[i] = fibo

2016-11-27 15:38:01 430

转载 “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)

问题描述如下:有 三个源文件,A.h、B.cpp、C.cpp。A.h是头文件,其中声明了三个变量a1、a2、 a3。B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件。B.cpp和C.cpp中均包含头文件 A.h。在编译时,编译能够通过,但链接时出了问题,出现”error   LNK1169:   找到一个或多个多重定义的符号“的错误。经过分

2016-10-13 19:10:31 244

转载 “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)

“error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)问题描述如下:有 三个源文件,A.h、B.cpp、C.cpp。A.h是头文件,其中声明了三个变量a1、a2、 a3。B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件。B.cpp和C.cpp中均包含头文件 A.h。在编译时,编译能够通过,但链接时出了问题,出现”err

2016-10-13 19:08:29 342

原创 编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回 值value的二进制位模式从左到右翻转后的值。

//如://在32位机器上25这个值包含下列各位://00000000000000000000000000011001//翻转后:(2550136832)//100110000000000000000000000#includeunsigned int reverse_bit(unsigned int num){   unsigned i

2016-09-02 10:58:25 237

原创 两个int数m和n的二进制表达式中有多少位不同?

#intclude  int diff_count(int m,int n){ int i=0; int count=0; for(i=0;i{ if(((m>>i)&1) != ((n>>i)&1)) count ++;}return count;}     int main(){int m=15;int n=10;int ret;

2016-08-29 20:06:17 890

空空如也

空空如也

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

TA关注的人

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