自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++中的野指针和内存泄漏问题

文章目录野指针问题什么是野指针野指针问题成因内存泄漏智能指针野指针问题什么是野指针在c++中,使用指针是需要解引用去访问一块内存地址的。当一个指针变量指向的地址是非法地址时,就会出现野指针问题。一般我们在写代码的时候,会对指针变量有一个判空处理,但是对于野指针时,是不会被 ‘ ptr == nullptr ’ 中识别出来的。会导致在接下来的代码逻辑中,造成非法访问,异常,导致进程崩溃退出等等的问题。野指针问题成因野指针问题也是一个在实际代码工作中很常见的一个问题,也会不同的情况导致野指针问题出现:

2021-11-18 19:27:10 754

原创 多路转接(IO复用)总结

文章目录五种IO模型SElECTPOLLEPOLLIO复用的优点五种IO模型SElECTPOLLEPOLLIO复用的优点

2021-11-04 14:58:36 361

原创 22届秋招小总结

22届秋招到现在基本上都已经落下帷幕了,秋招也鸽了好久,一直没有更新自己的博客了。趁着现在闲下来了重新拾起自己的csdn吧,也算是给自己秋招这段时间的一个总结。我是双非一本本科生,虽说一本看上去是个还行的样子,但是在互联网行业。依旧处于学历的底层。秋招大大小小的公司投递了大概三四十家。主要还是在冲刺bat等等一系列大厂,虽然过程充满坎坷与遗憾。但也算是努力走过来了。也祝愿还在奋斗路上的小伙伴能拿到满意的结果。当然,互联网行业的技术更新迭代迅速,也还是要自我勉励,继续学习。最开始思考的问题相信一定都是就业

2021-10-24 18:57:12 288

原创 几种常见的设计模式

文章目录工厂模式简单工厂模式工厂方法模式抽象工厂模式单例模式懒汉模式饿汉模式适配器模式观察者模式工厂模式工厂模式提供了一种创建的方式,它又可以分为简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式工厂方法模式抽象工厂模式单例模式懒汉模式饿汉模式适配器模式观察者模式...

2021-08-06 23:38:07 175

原创 基于C++的高并发内存池

这里写目录标题内存池内存碎片问题申请效率的问题malloc概述并发内存池的设计概述threadcacheTLScentralcachepagecache向系统申请内存基数树系统测试内存池内存池是一种动态分配与管理技术。内存碎片问题申请效率的问题malloc概述并发内存池的设计概述threadcacheTLScentralcachepagecache向系统申请内存基数树系统测试...

2021-07-23 23:10:39 488 1

原创 C++ 简单实现红黑树的插入

文章目录红黑树简介红黑树的特点红黑树的插入红黑树简介红黑树是在AVL树的基础上做出一些改变。都是在插入和删除时,对二叉树进行旋转来保证二叉树的平衡。从而保证高效的查找效率。红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树。后来才被修改为如今的“红黑树”。红黑树不必严格遵守高度差为1, 红黑树可以容许最高高度不超过最低高度的二倍。这样即使我们需要搜索一个最坏的情况。也只需要搜索"二倍的以二为底n的对数"次 , n为二叉树的节点个数。红黑树的特点红黑树节点分为两个颜色

2021-06-14 21:03:15 424 3

原创 C++实现 AVL树

文章目录AVL树简介AVL树的旋转整体代码实现AVL树简介AVL树是 “ 搜索 平衡 二叉 树” ,我们知道 AVL树 来自 搜索 树, 我们知道 搜素树可以有效的提高数据的查找效率, 但是如果我们创建搜索树时,数据接近有序,搜索树就会退化成单支,此时我们查找的时间复杂度依然会是O(n)。因此, 俄罗斯的两位数学家发明了AVL树解决了这个问题,AVL树的命名也是由两位数学家的名字缩写得来。AVL树的特点是, 树中,任意一个节点的左右子树的高度之差不大于1。 这样就避免了搜索树退化成单支的问题。当A

2021-06-04 23:44:35 510 1

原创 linux下基于阻塞队列的生产者消费者模型

这里写目录标题锁生产者消费者模型代码实现锁生产者消费者模型代码实现

2021-05-31 11:16:15 180

原创 linux_同步互斥概念总结

文章目录前言同步和互斥锁前言在linux操作系统下。线程实际上上是应用层的进程。同步和互斥锁

2021-05-29 20:42:56 289

原创 ifndef和pragma once的作用与区别

文章目录ifndefpragma once区别ifndefifndef是c/c++语言中支持的宏定义。 格式大体如下:#ifndef __X__#define __X__ /*...*/#endif“ifndef”是“if not define” 的缩写。 作用就和字面意思一样。如果没有定义 则定义。这样通过宏定义来避免一个文件被多次编译。但是使用宏定义会有宏名冲突的问题,例如类似这样的#define X 3#define X 4这里对X的宏定义重复进行,这样是会编译出错的。

2021-05-23 02:15:27 626

原创 linux_线程概念总结

文章目录线程的概念线程的优点线程的缺点线程的创建POSIX线程库线程的概念线程是操作系统能够惊醒运算调度的最小单位。线程是在程序内部运行的。即线程是在进程的地址空间内运行的。在linux中,实际上并没有确切的真正的线程。在linux利用进程来模拟线程。但是在CPU看来,会比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。线程的优点创建一个新的线程的代价比创建一个新的进程小;线程之间的切换 相比进程间的切换 操作系统的工作

2021-05-12 16:35:38 171

原创 exec函数族总结——简单模拟shell脚本

文章目录概述三级目录概述在创建子进程时,子进程会对代码进行完全拷贝。虽然我们可以通过fork()的返回值来让父子进程执行不同的代码。但是一般情况下,很可能父子进程的代码是完全不一样的。例如我们的父进程是一个shell脚本,子进程是一个可执行文件。此时我们就无法简单的通过返回值来完成任务了。于是就有了exec函数族来解决这个问题。exec函数族包含6个函数。int execl(const char& path,const char* arg, ...);int execv(const ch

2021-05-07 22:31:35 414

原创 动态库和静态库总结

文章目录动静态库概述生成静态库生成动态库使用自己的库动静态库概述静态库(.a)文件:程序在编译链接的时候把库的代码直接链接到可执行文件中,程序运行的时候就不再需要静态库动态库(*.so)文件:程序在运行的时候才会链接库的代码。因此,一个动态库的可执行文件,只需要知道我需要去哪里找哪个函数就好。所以在链接动态库的可执行文件只需要包含一个需要用的函数入口地址的表,在执行的时候再去链接就好。而链接静态库的可执行文件则在编译链接时,将外部函数所在目标文件的整个机器码放进来。所以通过链接静态库生成的可执行

2021-04-14 22:17:06 265

原创 关键字const——const char*和char* const

文章目录概述const char* 和char* constdefine 和 const概述关键字const一般用来修饰定义常量。使用const修饰的变量就不能被更改了。这是因为在编译时,编译器不会为被const修饰了的变量分配储存空间。而是直接保存在符号表中。这样在使用const修饰的变量时,也没有了保存和访问内存的操作。效率也会更高一点点。这就是const关键字的大体上的作用。一般来说我们定义的变量用const修饰是没有区别的,例如int const a=2;const int b=2;

2021-04-03 16:29:58 2277 1

原创 linux进程总结——进程退出

文章目录进程终止退出进程退出方法_eixt(int status)exit(int status)接受进程退出信息(进程等待)进程的status进程终止退出一个进程退出的状态场景一般会是:程序运行结束,返回一个结果。 (尽管这个结构可能是正确的,也可能是错误的。但是这个结果是我们预期之内的。)程序运行异常结束。(程序没有运行到结束就退出了。)进程退出方法类似的:一般我们在写代码时,都会使通过return在一个函数执行结束时,返回一个我们需要的数据。这就是退出程序的方法。在结束一

2021-03-20 22:28:14 560

原创 linux——进程概念总结

文章目录基本概念创建进程进程状态进程优先级基本概念在计算机结构中,进程是程序的基本执行(担当分配系统资源,包括像CPU时间,内存空间)的实体。通俗来说,进程就是我们具体执行程序的那个过程。当我们执行一段代码时,就是一个进程。而每一个进程都有属于本进程的一些属性信息。这些信息被存放在内核的一个结构体当中。包括像进程的标识符,状态,优先级等信息。在linux操作系统中,可以在/proc系统文件夹中查看。创建进程一般我们可以通过fork()函数来创建一个进程。当我们通过fork()创建一个进程时,

2021-03-10 22:15:17 172

原创 C语言排序算法——快速排序

文章目录快速排序实现思路实现代码快速排序快速排序是将等待排序的集合分成两部分,设定一个k值,其中一部分小于这个k值,另外一部分大于这个k值。对每个部分重复这个过程。知道每部分都只有一个元素的时候。就可以完成排序了。实现思路首先我们需要选取一个k值, 一般情况下我们可以使用数组的第一个值或者最后一个值。假设我们先选取数组的第一位为k值。 我们假设为6。然后我们利用两个指针,一个指针(left)从左边开始向右移动,一个指针(right)从右边开始向左移动,当left指针找到一个大于k值时停下,当r

2021-02-21 19:47:54 7331

原创 C语言排序算法总结——堆排序

文章目录前言思路代码实现前言这次我们介绍堆排序。堆是一种完全二叉树的数据结构。他的父节点总会大于他的子节点叫做“大堆”。他的父节点总会小于他的子节点叫做“小堆”。虽然画的很丑,但是结构大体如图这样的。思路我们用数组来保存二叉树。每个父节点的左子节点的下标,是父节点下标的两倍加一,右子节点的的下标,是父节点下标的两倍加二。 我们之前在介绍二叉树时有介绍这样的方法。所以我们先构建一个用来创建堆的结构体:typedef struct Heap{ DATATYPE* _val; DAT

2021-02-12 13:19:53 206

原创 C语言排序算法总结——希尔排序

这里写目录标题前言思路代码总结前言之前我们总结了比较简单的几种排序方法。冒泡,选择,排序。但是也提到了这些排序方法的缺陷。时间复杂度太高,在有大量数据需要排序的时候,会需要浪费太多的时间。所以在很多场景中是不适合使用。我们这次总结一种时间复杂度更优秀的希尔排序。思路希尔排序是以插入排序为基础的改进版本。是由Shell提出的方法。所以就叫希尔排序了。。插入排序的基本思路是:将元素插入到一个有序的元素集合中。在使用插入排序时,我们是一个接一个的。希尔排序的思想是:先确定一个flag,将待排序数组分为

2021-02-02 23:44:42 521

原创 C语言排序算法总结(1)--冒泡、选择、插入

目录冒泡排序选择排序插入排序总结冒泡排序冒泡排序是基础排序之一,也是一种稳定排序。无论是逻辑还是代码都比较简单。思路就是比较数组的前后两个元素的大小,如果前面的元素比后面的元素大,就让两个元素交换。 这样当一轮排序结束后,最大的数就会放到最后,这个过程就像水中的气泡一样,一点一点上浮,冒泡排序就是让数据一点一点移动。(图片来自网络)于是每走完完整的一趟,下一次就可以少比较一次,因为最大的数已经在最后面了,所以我们就可以使用双层循环,一层循环控制一共需要走多少个循环,里面的循环控制这一次一共需要比

2021-01-28 23:08:50 281

原创 二叉树的C语言实现及遍历

前言树是一种十分重要的基础数据结构。很多实际问题都会抽象成树来解决。而这篇文章要讲的二叉树则是树中最基本又很重要的一种特殊树。它只的是每个节点的度不大于2的树。基于二叉树还有很多衍生的树。查找树,红黑树,平衡树等等等等。基础思路二叉树可以很形象的看做是一个递归的产物。所以二叉树的问题,基本都可以用递归来解决。无论一颗二叉树是什么样子的。他都可以看做三部分:本节点,左子树,右子树。左子树也可以看成本节点,左子树,右子树。这样的结构。就像图片上这样。所以一个树的节点需要三部分。保存本节点的数据。

2021-01-23 03:44:44 2047

原创 利用MATLAB完成对图像的巴特沃斯滤波

前言最近因为课程原因接触了仿真软件MATLAB,略微了解了一下MATLAB,不得不感慨MATLAB的功能强大。自己写了一点简单的图像滤波。和大家分享一下。设计问题。对图像进行加噪处理(椒盐噪声)。利用巴特沃斯滤波器对加噪图像进行滤波处理。处理的一些思路:实在是不得不感慨MATLAB的强大。实验很简单。基本就是依靠的仿真软件。对图像进行加噪处理直接调用了现成的函数。对图像的滤波处理。将图片的数据进行傅里叶变换。然后对变换后的数据进行滤波处理。在反傅里叶变换就好。值得注意的是要注意使用图片

2021-01-18 23:33:50 9083

原创 C语言贪吃蛇小游戏

文章目录简单的思路分析蛇属性的设置生成食物让蛇动起来总结简单的思路分析蛇属性的设置生成食物让蛇动起来总结

2021-01-06 21:17:41 3094 3

原创 异常:写入访问权限冲突

前言这次朋友写代码时遇到解决不了的问题。让我帮忙看看。我觉得这个问题还挺好的,所以写下来记录一下,也算是给自己做一个笔记。异常引发了未经处理的异常:写入访问权限冲突。The variable ‘S’ is being used without being initialized.(使用了没有初始化的变量‘S’)其中引发第一个问题的大部分情况可能是数组越界。遇到这个问题首先可以查看自己的代码是否有数组下标越界的情况出现。出问题的代码:int main(){ stack* S;

2020-12-11 17:34:42 37185 6

原创 数组形式的加法-C语言实现

前言一道比较有意思的题。要求利用数组储存数字来完成加法运算。对于非负整数 A 而言,A的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。给定非负整数 X 的数组形式 X,返回整数 A+K 的数组形式。来自力扣。原题链接:添加链接描述在遇到需要存储很大的数字的时候,利用数组来完成计算是一个很巧妙的想法。实现思路首先一个取巧的思路,将数组里的数遍历成一个数字。例如先将[1,2,3,4]改为1234,然后在计算。但是当这个数字很大的时

2020-12-09 18:27:15 7968

原创 C语言-动态内存分配函数总结

文章目录mallocreallocrealloc可能遇到的错误malloc你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。realloc我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown

2020-11-28 22:25:10 524

原创 C语言 结构体的释义和内存分配

前言还是自己复习到的内容,以前在学习C语言的时候还有缺陷。所以总结一下关于结构体的内容。结构体就是为了封装,这就有一点面对对象的类的影子。然后通过一些方法来访问结构体成员。需要用的struct关键词。结构体代码typedef struct node //定义一个结构体{ char x; // 这里结构体成员 char y; int z;}XYnode; //结构体名字这是结构体最基本的定义。通过typedef struct 来定义一个结构体。这里的node是一个标识符

2020-11-26 00:02:57 944

原创 C语言指针 * 和 & 总结

C语言指针*和&的总结前言最近复习了C语言中指针,在网上看了一些资料,发现很多人在解释指针的时候提到了“引用”这个概念,但是C语言是没有这个概念的,大概是在学习时是用来cpp的来学习。所以在这里有一点误会。C语言中是没有引用这个概念的。如果大家在刚开始学习c语言时,尽量用GCC编译器。以免混淆一些概念。指针例如在有: int a = 10; int* p = &a;在定义一个整型变量a后 ,定义一个整型指针p指向a,在这里p中存放的是存放变量a的地址。对于指针,谭

2020-11-20 01:01:58 5157

原创 C语言递归实现扫雷小游戏

目录前言简单的初始界面制作棋盘和布雷“雷”的判断与展开判断游戏结束执行游戏前言为了复习C语言的语法嘛,就简单的写了一下扫雷这样一个小游戏,完全在命令行窗口运行。思路也比较简单,采用数组来模拟棋盘。一个用来模拟地雷的分布的数组。一个用来打印玩家开始看到的数组。在选择坐标后展开周围的地方。判断未展开的格子数与地雷数是否相等。结束游戏。简单的初始界面简单的一个初始界面,用来选择开始游戏和退出。也可以在这里在后续加上难度选择等等功能。void ShowMenu(){ printf("*********

2020-11-13 00:14:37 428

原创 C语言——关键词static解释

C语言——关键词static解释staticstatic在c语言中可以修饰变量或者函数。总得来说,用static修饰的变量或是函数具有静态的特性。static修饰局部变量static修饰局部变量的主要改变在于改变了局部变量的生命周期。一般的局部变量,生命周期都是在它的函数内,在函数结束的时候,就会释放变量。再次进入函数时,会重新定义这些变量。当这些函数用static修饰的时候,会变成静态变量。就是不会在函数结束时就释放掉。当再次进入函数时,也不需要重新定义。对比下面的代码。void print_1

2020-11-05 01:05:39 1079

原创 参加程序设计大赛的总结反思

参加程序设计大赛的总结反思前言近来我正好在复习总结C语言的相关问题。正巧遇见了程序设计比赛的活动。我就去试了试。对自己的预期很好。但是考试结果并不是很理想。做题速度很慢。从考场出来还没回宿舍就已经回想发现自己一道大题做错。意识到自己还有很多问题。问题我做错的题是: 一只鸟以初速度1m/s飞行,每经过一个单位时间,速度增加2m/s,计算给出实践单位内飞行路程。 输入计算次数,和每次需要计算的时间单位,输出相应得飞行路程。输入样例:2 1 2输出样例:1 4因为数字可能很大,所以结果对1

2020-11-02 17:55:04 1499

原创 C语言——关于简单代码的优化问题

C语言——关于简单代码的优化问题概述最近在整理c语言的东西的时候,翻到了自己刚接触计算机语言时写的代码。也是深有感触。在一开始写代码的时候自己是只追求不报错。甚至对很多关键词的理解都不到位。所以写代码的时候也仅仅只是做到了不报错而已。这样的代码其实是很不好的,无论是运行效率和代码可读性而言都是很差的。举一个很简单的例子。这是我刚开始接触c语言时的代码,找两个数中的较大值。int max(int a, int b){ int c; if (a < b) {

2020-10-29 21:03:04 303 2

原创 C语言中的转义字符详解

C语言中的转义字符详解简介字符嘛,一般在键盘上键入后,可直接显示的字符成为可显示字符。但是有一部分字符,在键盘上没有与之相对应的一个键,这种字符大多是为控制作用而设计的,称为控制字符。如果要键入控制字符,就需要使用转义字符表示。就是使用以”\”开头的字符。转义字符在c语言中,转义字符种类其实不多,大概有这些:\a → 响铃\f → 换页\n → 换行\0 → 字符串结束标识\r → 回车(回到当前行的行首)\b → 退格\t → 水平制表

2020-10-27 20:16:05 10705 3

原创 学习记录——初始——计算机学习准备

学习记录——初始——计算机学习准备初衷我现在是大三的一名通信学院本科生,目前准备做一名社畜程序员,今天偶然间看到了这篇文章,又正准备对之前学习的语言工具进行整理,于是决定用博客记录一下自己的学习过程。作为程序员,坚持写博客对我们有什么好处?~学习目标前两年自己过得浑浑噩噩,本专业的课程学的零零散散,计算机也半斤八两,转眼间就步入大三了。决定整理一下自己之前学到的各种语言和工具。和将来一年多的规划。一起进步。C语言C++数据结构操作系统网络数据库令人羞愧的是现在的我还远没有完成自己

2020-10-27 16:09:24 2348 3

C语言贪吃蛇小游戏代码

C语言贪吃蛇小游戏代码

2021-01-06

C语言扫雷小游戏代码

C语言扫雷小游戏代码

2021-01-01

空空如也

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

TA关注的人

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