自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Cmake编译protobuf源代码失败问题

只勾选shared_libs即可。

2024-06-12 14:50:49 75

原创 Protobuf生成的源文件编译的库时报错 LNK2019 无法解析的外部符号解决方法

确保VS中附加库目录和链接器正常链接,如果还不能解决,将.cc源文件添加到项目的Source Files中。

2024-06-12 14:47:25 92

原创 编译器的堆空间不足解决方法

对于编译器的堆空间不足报错,这通常是由于程序运行时使用的堆空间超出了预设的限制。在调试期间使用多线程调试 DLL (/MDd) 时,可能会启用更多的调试信息和错误检查功能,从而增加了额外的内存开销。有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x00000058AC9FEC00 处。在网上查了很多资料无果,最后打开项目属性–>C+±->代码生成–>运行库选择多线程DLL(/MD)解决;

2024-06-12 14:43:10 248

原创 Qt读写Excel文件

这个例子创建了一个Excel对象,并在其中添加了一个工作薄、一个工作表和一个单元格。然后将字符串“Hello World”写入单元格“A1”,并将工作簿保存为名为“example.xlsx”的文件。请注意,此过程中需要使用COM接口中的很多细节函数和参数,因此您需要仔细查看文档和参考资料。QT提供了QAxObject类,可以通过它与COM对象(例如Microsoft Excel)进行通信,从而实现读取和写入Excel文件的操作。当然,QT还有许多其他库和插件,可以更方便地操作Excel文件。

2023-05-12 15:07:55 987

原创 exe或Dll依赖分析(个人认为比Process Monitor和Dependency Walker好用)

dumpbin 可以用来列举出某个二进制文件所包含的所有函数名称,导出表、重定位表等信息,因此可以帮助我们分析链接错误和执行时动态链接问题。注意:在使用 dumpbin 之前,请确保您的 PATH 路径中已经加入 Visual Studio 相应版本的 bin 目录,以便能够直接在命令行使用。/linkermember:对于使用 VC Linker 的可执行程序和库文件,显示该文件中的符号。/imports:列出可执行程序依赖的所有动态链接库,以及它们所包含的导入函数,也就是可执行代码中的外部引用。

2023-04-14 20:14:24 531

原创 解决cmd已退出,退出代码为3,[Qt5] Error starting process moc.exe: 系统找不到指定的文件等编译问题

C++编译错误

2023-04-12 15:41:18 1543

原创 C++ STL::Vector

注意:一维数组的下标是从0 00到v . s i z e ( ) − 1 v.size()-1v.size()−1,访问之外的数可能会出错。1.1 STL中的vector是一种动态数组容器,它可以随着元素数量的变化自动调整大小,同时提供了许多便利的成员函数来操作其中的元素。end():返回指向vector的最后一个元素的下一个迭代器。begin():返回指向vector的第一个元素的迭代器。front():返回vector的第一个元素的引用。back():返回vector的最后一个元素的引用。

2023-04-03 15:21:53 128

原创 C++智能指针简介

在上面的例子中,我们首先创建了一个std::shared_ptr对象ptr,然后通过ptr的weak_ptr()方法创建了一个std::weak_ptr对象weakPtr。需要注意的是,std::shared_ptr在处理循环引用问题时需要特别小心,因为两个std::shared_ptr对象可能相互引用,导致它们的引用计数永远不为0,从而导致内存泄漏。std::weak_ptr是一个弱引用智能指针,它可以监视由std::shared_ptr的物理的内存块,但不会增加该内存块的引用计数。

2023-04-03 14:56:08 99

原创 最近工作中遇到的堆栈溢出的问题

第一种解决办法:在VC++6种依次选择Project->Setting->Link,在Category中选择output,在Reserved中输入16进制的栈内存大小如:0x10000000,然后点ok就可以了。Windows程序的内存机制大概是这样的:全局变量(局部的静态变量本质也属于此范围)存储于堆内存,该段内存较大,一般不会溢出;第二种情况比较常见了,我就是犯了这个错误,我在函数里定义了一个局部变量,是一个类对象,该类中有一个大数组,大概是1.5M。2>使用堆内存增加栈内存。1>增加栈内存的数目。

2023-04-01 11:19:27 551

原创 C++调用外部进程

LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程的安全属性。LPSTARTUPINFO lpStartupInfo, // 传递给新进程的信息。LPVOID lpEnvironment, // 指向新的环境块的指针。

2023-03-31 16:15:15 294

原创 C++11新特性:std::acsyn

该函数将在一个新的线程中异步执行,并返回一个std::future对象,可以使用该对象检查任务的状态,等待任务的完成,并获取函数的返回值。是C++11标准库中的一个函数模板,用于创建异步任务并返回一个std::future对象。的成员函数(如wait或get)时才执行,此时任务将在当前线程中同步执行。传递给第一个参数,则任务将延迟执行,并在调用。表示任务将在一个新线程中异步执行。创建了一个新线程,并在其中异步执行。对象获取结果之前,必须使用。函数的返回值,程序调用了。等待任务的完成,并调用。

2023-03-29 23:27:39 109

原创 C++新特性:lambda表达式

C++ Lambda表达式是一种匿名函数,可以方便地创建和传递函数对象。Lambda表达式最初是在C++11标准中引入的,可以使用Lambda表达式来代替函数指针和Functor对象。其中,capture list是一个可选的捕获变量列表,用于在Lambda表达式中访问外部变量,parameter list是参数列表,与普通函数的参数列表类似,return type是返回值的类型,可以省略,如果省略则会自动推断,function body是Lambda表达式的主体语句,与普通函数语法类似。

2023-03-29 22:41:15 552

原创 C++回调函数详解

在上面的代码中,我们定义了一个add函数并将其地址赋值给了一个函数指针变量func_ptr。在Windows平台下,我们需要将该函数注册为窗口类的成员,并在程序运行时,通过调用CreateWindow函数来创建一个窗口。回调函数是指由用户实现的,用作参数传递给另一个函数的函数。通过使用函数指针,我们可以把一个函数作为参数传递给另一个函数,或者把一个函数赋值给另一个指针。一个典型的回调函数包含两个函数,一个是函数指针的声明,另一个是被调用的函数。函数中将回调函数作为参数传递,并在其中调用回调函数。

2023-03-29 15:21:23 529

原创 C++常见崩溃(最近遇到)

可以使用内存泄漏检测工具来帮助识别和修复该问题。在赋值之前,可以先创建一个临时的结构体对象,将要赋值的结构体复制到临时对象中,然后在将临时对象复制到目标结构体中,就可以避免出现崩溃的情况。在 C++ 中,可能会出现结构体在赋值时崩溃的问题,通常是因为结构体成员变量的访问权限冲突导致。总之,在将结构体赋值时,请确保结构体成员变量的访问权限正确,可以使用上述方法来解决赋值时出现的崩溃和访问权限冲突问题。检查结构体成员变量的访问权限:将结构体成员变量的访问权限改为 public,以确保在赋值时可以进行访问。

2023-03-29 11:37:44 1431

原创 C++11新特性:移动语义

移动构造函数和移动赋值操作符可以接受右值引用作为参数,并且可以将对象的内部资源指针转移给另一个对象,而不需要进行复制。传统的拷贝构造函数和赋值操作符会对对象进行完全的复制,但有时候我们并不需要完全的复制,只需要把对象的资源所有权转移给另一个对象即可。最后,我们打印了所有对象的原始数据以及大小,可以看到移动语义成功地将内部资源的所有权转移给了另一个对象,而不需要进行复制。在这个例子中,我们定义了一个简单的字符串类,并实现了它的移动构造函数和移动赋值操作符。我们用一个带有字符串数据的对象来初始化对象。

2023-03-29 11:33:13 220

原创 C++11新特性:拷贝构造函数

隐式定义的拷贝构造函数将会使用其它已存在的构造函数,以深复制的方式来创建新的对象。C++中的拷贝构造函数是一种特殊的构造函数,它用于创建一个新的对象,该对象是通过复制另一个对象的值而创建的。在拷贝构造函数的执行过程中,我们需要创建一个新的对象,并把所有数据成员的值复制到新的对象中。但是,如果对象含有动态分配的内存,我们通常需要在拷贝构造函数中进行深拷贝,以确保新对象和原对象之间有独立的内存空间。在拷贝构造函数中,我们需要使用另一个对象的值创建一个新的对象,这里使用了深拷贝的方式。,并将它的值设置为10。

2023-03-29 11:31:57 322

转载 Inno Setup区段之Setup篇

Inno Setup区段之Setup篇简述该区段包含用于安装程序和卸载程序的全局设置。某些指令对于你创建的任何安装程序都是必需的。在此是 [Setup] 区段的一个示例:[Setup]AppId=04a843489fc44a56b7f5f9d4af803898AppName=TestAppVersion=1.1DefaultGroupName=My Program主要key讲解AppId | 应用的唯一ID值 , 不做显示用 --------必填项AppName | 用于指定在在安装应

2022-03-23 10:14:58 737

原创 浅谈C++单例模式

一 简介单例模式,指的是某一个类,只允许实例出一个对象存在。而实现单例模式有懒汉式和饿汉式。饿汉式指的是在创建类时就初始化好对象,,而懒汉式指的是在需要使用到对象实例时,才进行初始化对象。二 实现方式1.最基本的实现方式#include #include class SingLeton{private:SingLeton() {};static SingLeton *p;public:static SingLeton *initstance();};SingLeton* Sing

2022-03-22 20:58:34 1641

原创 C++学习路线

语言本身的学习C语言:除了最最基础的语法:变量、条件、循环、字符串、数组、函数、结构体等之外C语言最最最最最重要的那就是:指针、内存管理,以后企业里开发就靠它俩吃饭,这也是检验C语言掌握情况的两大标准推荐书籍:《C Primer Plus》、《C和指针》、《C专家编程》C++:C++和C语言确实是不同的语言,但是C++确实是对C语言的延伸,可以理解为在C语言里加入了面向对象的特性。因为只有面向对象特性的加持,代码才能更好的复用、扩展和工程化,这是大型项目的必备要素除了C语言所有的底子之外,还需

2022-03-18 19:23:37 4645 1

原创 数字签名简介

一、数字签名简介数字签名是基于公钥密码体制(非对称密钥密码体制)的。1.1.基本特征数字签名必须保证以下三点:报文鉴别——接收者能够核实发送者对报文的签名;报文的完整性——接收者不能伪造对报文的签名或更改报文内容。不可否认——发送者事后不能抵赖对报文的签名;1.2.数字签名的验证过程image-20200203210110403上图位用户A使用数字签名向用户B传输一份文件的过程:首先,文件经过单向散列函数的处理得到一份占128位的摘要(无论文件多大,经过单向散列函数的处理,生成的摘要都是

2022-03-17 21:59:55 1992

原创 cookie和session的详解与区别

cookie和session的详解与区别目录1.1 Cookie机制1.1.1 什么是Cookie1.1.2 记录用户访问次数1.1.3 Cookie的不可跨域名性1.1.4 Unicode编码:保存中文1.1.5 BASE64编码:保存二进制图片1.1.6 设置Cookie的所有属性1.1.7 Cookie的有效期1.1.8 Cookie的修改、删除1.1.9 Cookie的域名1.1.10 Cookie的路径1.1.11 Cookie的安全属性1.1.

2022-03-17 21:23:21 294

转载 zRAM内存压缩技术原理与应用

zRAM内存压缩技术原理与应用

2022-03-13 15:41:35 2211

原创 2021-07-20

linux 下c语言读写锁实现线程同步问题#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h>pthread_rwlock_t rwlock;void *pthread_one(void arg){/ 分别测试先上写锁和先上读锁的情况 *///pthread_rwlock_wrlock(&rwlock);pthread_rwlock_

2021-07-20 14:26:37 71

原创 Linux下三种网络模式配置之NAT模式配置

Linux下三种网络模式配置之NAT模式1.在vmware中编辑中选择虚拟网络配置,点击下面的NAT模式点击确定。2.点击选项中的虚拟机进入设置,找到网络适配器选择NAT模式。3.重启网络,systemctl restart network 然后ip a查看ip 地址,如果还没有ip,则需要激活网卡4.切换目录到cd /etc/sysconfig/network-scripts/5。ls查看目录下文件,找到文件ifcfg-ens33/eth0(注:有些电脑会有不同)6.查看此文件夹下网卡是否被禁

2020-12-23 10:48:14 635

空空如也

空空如也

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

TA关注的人

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