- 博客(28)
- 收藏
- 关注
原创 c++智能指针的实现 my smart_pointer
想写个智能指针,以加深理解。在网上搜了好多例子,都不是很满意,有的都便不过。参考网上的代码,自己改写了一个版本。设计思路如何实现智能指针? 首先要明确,智能指针有哪些基本的功能? 1.管理引用计数,并当引用计数为0时,自动析构。 2.具备一个指针最基本的功能,需要重载以下操作符: operator*() operator->() 3.需要定义以下几个函数 construct copy construct a...
2021-12-26 20:30:50 531
原创 c++ function应用实例
为什么要引入std::function? c++中,有多种函数或者类似函数的东西,包括传统函数,lambda表达式,仿函数,类成员函数,类静态函数等。在使用回调函数时,我们需要定义多个版本。引入std::function之后,实现了对函数的统一。std::function是一个多态的函数封装器,通过特征标来统一函数/类函数,从而在在函数/类函数界一统江湖。 下面的例子,所有的函数/类函数具有相同的特征标,int(int),输入一个int型的参数,返回一个in...
2021-12-26 14:01:00 248
原创 c++移动构造和普通构造的区别
通过一个例子来说明移动构造和普通构造函数的区别。这个例子也是参考网上的文章做的,原文忘记了。测试环境:Ubuntu 16.04 LTS如果一个class动态分配了内存,则普通构造和移动构造有以下区别:普通构造:会进行深拷贝,涉及到构造和析构移动构造:不会进行深拷贝,直接对对象的所有权进行转移,效率更高。下面的示例代码,在generateResource return时,会进行一次拷贝。如果注释掉移动构造版本的代码,则运行时调用普通的构造函数,log如下:Auto_ptr3()::
2021-12-26 13:54:26 563
原创 c++ 如何使用functor仿函数?
如何使用仿函数?1.通过对象调用printf("%d\n", func(2));2.通过临时对象调用funcMode(3)(4);3是构造funcMod使用的,4是传入的参数。3.在STL中使用,传入一个对象,对应的算法会自动调用仿函数。#include <stdio.h>#include <vector>#include <algorithm>class funcMod {private: int m_dev;public:
2021-12-25 15:22:34 520
原创 stack smashing datected.Aborted(core dumped)
在linux下编译程序时,遇到以下错误: stack smashing datected.Aborted(core dumped) 经排查,是由于对数组进行越界操作造成的,示例代码如下:define APP_DATA_SIZ 64typedef struct { appData[APP_DATA_SIZ ]; }receData; memcpy(receData.appData,
2017-05-12 18:17:47 692
原创 fatal error: input/output error
遇到的问题:一个程序在Linux系统中可以编译通过,在Linux和Unix的共享文件夹中编译时,报出以下错误:、fatal error: XXX input/output error,recipe for target X failed.产生此错误的原因:根据系统的提示信息,在生成可执行文件时出错。原因是存在目标文件的位置是Linux和
2017-05-12 17:50:09 4124
原创 Error request for member in something not a structure or union(指针类型的转换)
运行环境,PC 64位,编译工具:Dec-C++上个例子就清楚了。#include typedef struct { int num; char name[10];}Stu,*ptrStu;int main(void){ Stu Tom = {10,"Tom"}; char *p = &Tom; printf("num=%d,name=%s\n",p->num,p->
2017-05-05 18:20:24 4694
原创 Qt中自定义c++库及使用
基于Qt,自定义c++库,并调用该库,简单的记录下方法。1.库的建立1)打开Qt—New Project—Library—c++库,默认,按提示操作即可。2)在Linux终端,make distclean—qtqmake—make,生成库文件,libxx.so。2.调用库添加库—外部库,按提示操作,加载step1中生成的库文件。
2017-02-14 16:22:34 3450
原创 用strtok()解析IP地址
用strtok()来解析形如192.168.0.115:3333的IP地址。实现这个功能有两个关键点,一是对strtok()的正确使用,二是格式的转换。#include #include #include #define IP_SZ 20struct IPAddr { unsigned char ip[4]; unsigned short port;};/*对
2017-02-04 18:52:05 981
原创 数组指针基本概念
掌握多维数组和多级指针,有以下几个要点。1)要弄清楚数组的本质,数组和指针要灵活的转换。2)弄清楚是几维数组,几级指针,然后搞明白是指向行的,还是指向列的。3)把多维数组抽象成一维的。以下是一个实例,主要用来帮助理解数组指针的概念。#include int main(){ int a[][3] = {1,2,3,4,5,6}; int (*ptr)[3] =
2017-02-04 13:35:07 297
原创 指针常见错误总结
记录遇到过的关于指针的错误与疑惑。1.未初始化,就赋值#include #include int main(){ int *p; *p = 1; return 0;}运行时出现段错误,因为系统没有给指针p分配内存。没有房子,娶了媳妇往哪里放啊。 int *p = (int*)malloc(sizeof(int*));//先买房 *p = 1;//再结婚
2017-02-04 10:22:50 3441 1
原创 如何往指定的内存地址写数据
首先,随便找一块可用的内存地址。#includeint main(void){ int a = 1; printf("&a=%p\n", &a); return 0;}某次的运行结果为: &a=0x7fff124b3cfc#includeint main(void){ int *p = (int*)0x7fff124b3cfc; *p
2017-02-04 10:17:22 13331 2
原创 MTU,MMS
MMS,Maximum Segment Size,最大报文段长度。MTU,Maximum Transfer Unit,最大传输单元。已知MTU最大为1500字节。
2017-02-03 17:21:59 687
原创 数据链路层基本概念—由《协议森林》一文整理
《协议森林》系列文章写的通俗易懂,在此向作者致敬~~以下是我做的笔记。 以太网数据帧格式如下 Preamble: 序言,七个字节,每个字节都是0xAA,其作用是为了统一收发双方的频率。收发双方的频率必须统一,否则会丢失数据。开始通讯时,接收方会不断调整自己的频率,直到和发送方一致,这个过程称为时钟复原。这个过程,就像听收音机时,调整频率,直到接收到清晰的信号。
2017-02-03 17:13:40 546
原创 线程同步—信号量(闭环控制)
本文提供一个用信号量对线程实现闭环控制的程序,该程序只是为了演示信号量的作用,并没有实用价值。 程序的逻辑很简单,类似于数字电路中的时序图。在main()中触发一下,程序就会进入闭环控制了。上个图就一目了然了。 代码如下:#include#include#includesem_t sem1,sem2,sem3;void *thread_a(void*in){
2017-02-03 16:55:16 355
原创 线程同步—互斥锁+条件变量
在《线程同步—互斥锁》一文中,我们分析了只用互斥锁同步线程的弊端——CPU的效率和时效性不可兼得。下面,我们通过使用条件变量,在保证CPU效率的前提下,提高程序的时效性。 只用互斥锁同步线程,其CPU占用率之所以高,是因为线程需要轮询,即需要不停的检查条件是否满足。我们使用条件变量,当条件不满足时,使线程阻塞。一旦条件满足,就会解除阻塞,继续往下执行。这样,线程就不需要轮询了,因此不需要占用
2017-02-03 16:11:54 293
原创 线程同步—互斥锁
个人总结,请各位审慎的,批判着看。 当两个线程访问共享数据时,可以用互斥锁来进行同步。先看一个例子: 该程序有两个线程,一个用来从键盘读取输入的数据,一个把读取的数据显示出来。其中,数组buffer为两个线程的共享数据。 编译:gcc mutex_pthread.c -lpthread,不要忘记-lpthread。 运行该程序,在键盘上输入数据,然后把数据显示出来。读
2017-02-03 14:17:57 415
原创 文件缓冲区测试实例及总结
声明:这篇笔记是我去年写的,当时参考了网友的博客,现在想不起来是哪篇了。如有侵权请告知,我会及时修改,谢谢。 “Talk is cheap, show me the code",so,先来一个例子吧。#includeint main(void){ int i; for(i=1 ; i <= 1024 ; i++) { printf("%c",'a'); } while(
2017-02-03 10:05:26 758
原创 《C和指针》练习题~9.14_10 palindrome()
最近在看《C和指针》,做了一些课后习题,记录下。题目出处:9.14编程练习,第10题以下是我的解答:/*判断一个字符串是否为回文数,判断时忽略所有的非字母字符,并不区分字母的大小写*/int check( const char *str){ char str_del[LEN]; char *p_end = str_del; char *p_begin = p_end;
2017-01-23 14:42:38 251
原创 《C和指针》练习题~6.18-2 del_substr()
最近在看《C和指针》,做了一些课后习题,记录下。题目出处:6.18编程练习,第2题以下是我的解答:/*说明:str="123qwe456",若substr=789,返回0;若substr=qwe,则返回123456;*/int del_substr( char *str, char const *substr ){ char *tmp; while( *str !=
2017-01-23 14:04:39 595
原创 《C和指针》练习题~9.14_15 dollars()
最近在看《C和指针》,做了一些课后习题,记录下。题目出处:9.14编程练习,第15题以下是我的解答
2017-01-23 11:41:48 294
原创 客户端主动获知socket连接状态的变化
项目简介:该项目把手机上的导航信息发送到汽车仪表上,并在仪表上显示,实现手机地图到仪表的投射。发送端程序用Java编写,接收端程序用C++,Qt编写。仪表和手机之间通过wifi通信。服务器:仪表,客户端:手机。工作原理:当仪表开机后,定时的对外广播本机的IP及端口号。手机导航程序获取广播并解析仪表的地址信息,然后向仪表发送TCP连接请求。当连接建立后,即可实现通信。手机程序截取图片,然
2017-01-22 10:26:41 2597 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人