![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
0店小二
一位充满激情,乐于分享,喜欢挑学习新技术,接受新挑战的coder!
展开
-
gdb调试打印void* 或者void **类型的成员方法
linux gdb调试时,使用p命令打印一个(void *)变量时会报错:Attempt to dereference a generic pointer.此时,只需要将(void *)变量强制类型转化成需要打印的类型,使用p命令即可打印。例如,需要打印(int *)型entries变量,则使用命令格式:(gdb) p *(int *)map->entries$38 = 0...原创 2020-05-23 16:12:35 · 3863 阅读 · 0 评论 -
宏定义#define括号使用的深入认识
宏定义:注意x,y值都有一个括号,和特定的符号时 需要加上括号!// SWAP(x, y) 交换x,y的值 #define SWAP(x, y) \ (y) = (x) + (y); \ (x) = (y) - (x); \ (y) = (y) - (x); 求最大值和最小值 #define MAX原创 2016-01-09 19:45:22 · 5672 阅读 · 0 评论 -
memset是对字节进行初始化
#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string.h>using namespace std;int buf[2];int main(){ memset(buf, 1 , sizeof(buf)); cou...原创 2019-01-08 22:33:51 · 470 阅读 · 0 评论 -
写入时复制(Copy-on-write)机制
含义:写入时复制(英语:Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略。其核心思想是,如果有多个调用者(callers)同时要求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这过程对其他的调...原创 2019-03-13 11:18:00 · 7593 阅读 · 4 评论 -
gdb调试打印C++ STL
下载stl-views.gdbhttp://sourceware.org/gdb/wiki/STLSupportgdb常用打印"p variable-name",这种方式查看STL容器类,只会显示该容器的部分信息,比如p map,如果map中有1000个键值对,那么该次打印并不能打印全部。这时就需要stl-views.gdb这个脚本。将上述下载stl-veiws.gdb文件,放到~/目录下...原创 2019-04-26 15:32:43 · 2050 阅读 · 0 评论 -
http://blog.csdn.net/hackbuteer1/article/details/7883531
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7883531一、虚函数的工作原理 虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式。vptr 指向一转载 2016-08-09 21:55:12 · 646 阅读 · 0 评论 -
.pdb文件详解+“.pdb”中的 PDB 格式不兼容;请删除并重新生成”解决办法
对于问题:“.pdb”中的 PDB 格式不兼容;请删除并重新生成”根据路径提示将文件删除,重新编译生成即可解决问题~转自http://www.cnblogs.com/lidabo/p/3486114.html.pdb文件,是VS生成的用于调试的符号文件(program database),保存着调试的信息。在VS的工程属性,C/C++,调试信息格式,设置/Zi,那么VS就会原创 2016-06-21 22:28:51 · 15788 阅读 · 0 评论 -
数组和链表的区别
数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过转载 2016-03-08 16:36:58 · 407 阅读 · 0 评论 -
指针学习
指针数组:首先是一个数组吧,然后数组的元素是指针而已。说明形式为:type *pointer_array[constant1][constant2]...[constantn];例如:int *pai[3];由于‘*’是自右向左结合,因此从右向左看,首先看到[4]说明是一个数组,是一个包含4个元素的数组,然后看到‘*’,显然是指针类型,由此可以看出数组中存放的是指针而不是一般的类型。同理,ch转载 2016-03-18 22:44:58 · 344 阅读 · 0 评论 -
C++在两个类的头文件中相互定义变量,出现超前引用的情况的解决办法
两个头文件相互包含会导致超前引用的问题,所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。发生这种情况是无法编译通过的,不过可以采取一些手段解决该问题1) 使用类声明所有代码在同一个文件中的超前引用导致的错误处理方法:在超前引用一个类之前,首先用一个特殊的语句说明该标识符是一个类名,即将被超前引用。其使用方法是:a) 用class ClassB;声明原创 2016-03-15 20:40:43 · 1486 阅读 · 0 评论 -
指针与自增运算----(*p)++ 与 *p++ 与 ++*p 拨开一团迷雾
1.先说++i和i++的基础代码如下:12345678910111213141516171819202122232425#include //just change simplevoid stop(void){ system("pause"); } int main(void){ int i = 1; printf("i++ = %d\n",i++);转载 2016-01-09 20:12:58 · 1010 阅读 · 0 评论 -
位操作的详解
#define bwMCDR2_ADDRESS 4#define bsMCDR2_ADDRESS 17#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)#define BIT_MASK(_bf)(((1U(bs##_bf)#define SET_BITS(_dst,_bf,_val)\((_dst)=((_dst)&~(BIT转载 2016-01-09 09:32:19 · 496 阅读 · 0 评论 -
sizeof(数组名)和sizeof(指针)
32位环境下,int *p=new int[10];请问sizeof(p)的值为()A、4 B、10 C、40 D、8我以为正确答案为C,int类型为32位,占四个字节,10个自然就是40了,结果正确答案为A,只是指针p占的空间。因此写段代码测试一下:[cpp] view转载 2016-01-23 16:28:09 · 443 阅读 · 0 评论 -
C++引用&和指针在作为形参时的区别
int n;int &m = n;在C++中,多了一个C语言没有的引用声明符&,如上,m就是n的引用,简单的说m就是n的别名,两者在内存中占同样的位置,不对m开辟新的内存空间,对m的任何操作,对n来说是一样的。对于引用,有以下三条规则:(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。 (2)不能有NULL 引用,引用必须与合法的存储单元关联(转载 2016-01-19 10:25:46 · 7640 阅读 · 6 评论 -
关于嵌入式的学习和职业发展
嵌入式,这是个术语。在我看来,嵌入式系统是:为了应用高度定制软件和硬件的计算机系统,满足一系列的特定应用需求。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。原文为:Devices Use转载 2016-01-19 09:43:12 · 514 阅读 · 0 评论 -
有关默认初始化的问题
c++ primer,“内置类型的默认初始化”到底指什么?书中p40说和定义的位置有关,在函数体外 默认初始化”到底指什么?书中p40说和定义的位置有关,在函数体外初始化为0,在函数体内则未定义,我试了一下,确实是这样;书p40之后提到默认初始化时就根本不管定义的位置,都是未定义,比如int *p = new int,此语句中*p的值未定义。 提问者采纳能自动初始化的只是静态存储区的成原创 2016-04-01 14:49:43 · 793 阅读 · 0 评论 -
C++多态性理解
1. C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。2. 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。3.C++多态性是通过虚函数来实现的,虚函原创 2016-02-29 00:02:05 · 788 阅读 · 1 评论 -
VS较高版本打开低版本程序是提示:C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targe
这个问题是因为编译平台工具集选择错了,VS2012程序在打开的时候,默认是使用V110编译平台工具集,而初次打开低版本的程序是,默认的平台工具集是原版本的,,故提示此错误。 可以在项目-->配置文件读写项目 属相 中把平台工具集改一下即可。修改成自己当前开发环境的工具集即可~原创 2016-06-21 16:29:08 · 25826 阅读 · 1 评论 -
static a[n*m]={0};中static的作用
正如我们知道的,函数内部的变量和数组都在栈区开辟内存,但是栈区的内存是有限的,当我们要开辟的内存较大时,编译器会报错,那我们该如何处理呢!?我们又知道,static int a;表示在全局区为变量a分配内存,同理我们在数组前面加上static之后,系统也为该数组在全局区分配内存,全局区的总内存比较大,一般会满足我们的需求。如题:当n*m比较大时,这就是为什么static a[n*m]={0};原创 2016-05-19 22:30:33 · 527 阅读 · 0 评论 -
error C2628: 'TestClass' followed by 'int' is illegal (did you forget a ';'?)
作为C++菜鸟写代码时总会不了手忙脚乱、丢三落四,今天就郁闷了好久,问题终于找到了,与大家分享;错误提示为:error C2628: 'TestClass' followed by 'int' is illegal (did you forget a ';'?)error C2371: 'private: static int TestClass::Sum' : redefinit原创 2016-05-18 17:24:52 · 5766 阅读 · 3 评论 -
指针变量的使用
原帖为http://www.cnblogs.com/chinacloud/archive/2011/09/02/2163377.html 这里修改一处错误(最后二级指针例子解释修改)二级指针void change_val(char *p) { char new_val[3] = {2, 3, 4}; // [2] p = new_val;原创 2016-05-06 15:50:46 · 1110 阅读 · 1 评论 -
字符常量内存分配
字符串常量,放在哪个存储区呢?是“自动存储区”还是“静态存储区”中?比如:char *pstr="hello world!";这里,"hello world!"是一个字符串常量,pstr是在栈中的变量。我想问,字符串常量,在哪个内存区域分配空间呢?好像应该不是在“栈区“分配空间吧!!!一、预备知识—程序的内存分配一个由C/C++编译的转载 2016-04-16 10:51:09 · 937 阅读 · 0 评论 -
missing storage-class or type specifiers的原因及解决办法
error C2143: syntax error : missing ';' before '*'error C2501: 'CTest1Doc' : missing storage-class or type specifierserror C2501: 'GetDocument' : missing storage-class or type specifiers遇到这种莫名的错转载 2016-04-10 22:40:34 · 31029 阅读 · 3 评论 -
VC读写txt文件时提示unrecognized character escape sequence(无法识别的字符转移序列)
该问题其实很简单,这是由于在C/C++中 \是一个特殊字符,转义字符 例如 \n表示回车,所以要想表示 \原来的意义,就要使用 \\来表示if((fp=fopen("E:\1.txt","r"))==NULL) 修改为if((fp=fopen("E:\\1.txt","r"))==NULL) 即可原创 2016-04-09 17:05:00 · 4266 阅读 · 1 评论 -
VC运行时提示 "0x7c9569da"指令引用的“0x00000000”内存,该内存不能为"read"
首先说明之中错误一般是定义的指针出了问题,可能是动态分配的内存释放后没有赋值为NULL,使之成为野指针,导致内存泄露,也可能是编程错误时同一指针指向了不同的地方。这种错误在运行程序时会出现,但是Debug下不会出现提示错误,具体原因有待学习。原创 2016-04-09 16:21:12 · 875 阅读 · 0 评论 -
嵌入式学习推荐大家读得书
朋友也问过我,一些基础的东西学完了,如何进一步的成长,该学习哪些书呢?如果没有读过计算机专业的基础课程,那么计算机基础课程是一定要学习的。1.数据结构、离散数学、操作系统、编译原理这四门课学习完。数据结构和操作系统两门课程一定要细心学习,这个是基础理论。特别是数据结构,建议学习严蔚敏_吴伟民的《数据结构(C语言版)》。再找一本国外的,一共两本,学个一年。把书上的转载 2016-01-19 09:32:15 · 431 阅读 · 0 评论