c++
Frozen2022
这个作者很懒,什么都没留下…
展开
-
__unaligned修饰指针
如果是未对齐的指针类型,编译器会报告警告(在itanium的VLIS架构下报错)。为了避免这种情况,使用__unainged修饰指针。如void__unaligned*p;通过插入额外的检查来检测非对齐情况,并分别加载/存储跨越对齐边界的对象部分。这甚至比原生支持它的平台上的非对齐访问还要慢。...原创 2022-07-31 07:57:52 · 664 阅读 · 0 评论 -
QtCreator的console工程无console弹框,无法接收键盘输入
解决:需要勾选Run in terminal。在Projects ——>Run——>Run in terminal截图:原创 2022-05-19 10:55:40 · 827 阅读 · 0 评论 -
C++全局变量初始化的顺序
虽然一直强调不要用全局变量。但是对于特殊的应用场合,还是有全局变量的使用(如某些多进程、多线程的共享资源),我们希望在首次运行(载入)时,系统能够帮助我们进行一些必要的初始化。对不同的源文件中的全局变量,标准C++对全局变量初始化的顺序并没有要求。对于同一个原文件中,全局变量按照定义先后顺序初始化。对于堆类型的全局变量的创建和构造,可能在一个构造函数中调用另一个未构造的全局变量,通常会检查另一个指针是否有效,并在无效时构造那个对象。这就出现一个问题:一个指针在构造之前,被初始化。c/c++运行时原创 2022-05-10 20:01:53 · 1828 阅读 · 0 评论 -
COM与虚继承
通常会将不同的功能划分到不同的COM接口,到继承并实现具体功能的类。通过一个实现QueryInterface/AddRef/Release等公共函数的类,对外部暴露单一的接口,而实现COM组件的DLL封装。例如:class IMyCom1 : public IUnknown{public: virtual int add(int x, int y) = 0; virtual int sub(int x, int y) = 0;};class IMyCom2 : public IUnkn原创 2022-05-10 19:38:19 · 210 阅读 · 0 评论 -
使用cef_sandbox.lib链接时报错:_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”
解决方案:在预处理器的宏定义处加入:_HAS_ITERATOR_DEBUGGING=0关于的介绍请参考:微软MSDN在"安全库:C++ 标准库"中的相关介绍:_ITERATOR_DEBUG_LEVEL | Microsoft Docs详细了解:_ITERATOR_DEBUG_LEVELhttps://docs.microsoft.com/zh-cn/cpp/standard-library/iterator-debug-level?view=msvc-170...原创 2022-04-11 12:15:24 · 547 阅读 · 0 评论 -
lua的userdata的生存周期
userdata是一个特殊的table,它具有lua代码的所有表的特性。同时具有额外的:userdata。Userdata values cannot be created or modified in Lua, only through the CAPI. This guarantees the integrity of data owned by the host program.因为存在这片对C/C++绝对安全的内存,我们可以将C/C++对象与lua的table关联起来。如果能确定use.原创 2022-02-15 19:43:19 · 3312 阅读 · 0 评论 -
Qt中使用curl通过https下载数据崩溃
原因:http服务器发送到客户端的数据,如果使用gzip压缩,libcurl内部负责使用zlib解压缩。在编译libcurl时,如果使用的zlib和Qt内部的zlib版本不一致,会导致libcurl内部调用部分zlib接口时链接到Qt的zlib中,如:inflate_fast函数。解决:如果准备在Qt中使用libCurl,那么在编译libcurl时,指定zlib为Qt的zlib。...原创 2022-01-25 17:52:03 · 2249 阅读 · 0 评论 -
常量操作符警告C4455:identifiers with text suffixes that do not start with an underscore are reserved
出现这个警告的原因是:C++常量操作符的后缀建议以下划线开始。因为容易与默认的后缀产生“混乱”,例如定义了L常量,但是12345L也代表long类型原创 2022-01-19 13:38:17 · 579 阅读 · 0 评论 -
C++虚基类,在(钻石)继承下的派生类对象的内存布局
C++语言标准,对于虚继承的实现并未做出要求,这依赖于具体编译器的实现。大部分编译器的实现如下:class A{};class B : virtual public A{};class C: virtual public A{};class D: public classB,public classC{};class E: public class D{};int main(){E object;return 0;}这段代码中E对象object的内存布局如下:原创 2021-11-03 15:38:31 · 346 阅读 · 0 评论 -
c++中POD语义
1、POD类stands forPlain Old Data指的是一个类(使用struct或class定义),没有用户定义的构造函数、析构函数、赋值运算符函数、虚函数,同时它的所有非静态成员也都是满足POD。维基百科给出的描述:A Plain Old Data Structure in C++ is an aggregate class that contains only PODS as members, has no user-defined destructor, no user-defi...原创 2021-11-03 15:11:56 · 354 阅读 · 0 评论 -
linux程序报错terminate called without an active exception
程序“正常”退出时产生此错误。1、主线程结束,子线程未结束;2、程序中有些函数返回类型不是void,但是没写return语句;3、其它。原创 2021-09-24 16:50:58 · 3087 阅读 · 0 评论 -
VS链接错误:Fatal Error C1060
compiler is out of heap spaceThe operating system or run-time library cannot fill a request for memory.To fix this error try the following possible solutions If the compiler also issues errorsC1076andC3859, use the/Zmcompiler option to lower th...转载 2021-08-31 22:53:20 · 772 阅读 · 0 评论 -
WIFI设备列表中存在多个重复设备
If a scaned network has matching profiles, there will be multiple entries in the list, one for each profile, and an additional entry for the network without profile. For example, if there are two profiles for SSIDMyWiFi, p1 and p2, you will see three entr.原创 2021-07-15 09:05:43 · 383 阅读 · 0 评论 -
源代码恢复:使用IDA Pro反汇编obj文件
有时候系统或环境出错导致代码丢失或恶意篡改,如果这发生在提交源代码管理之前,那么只能自己恢复了。打开IDAPro.原创 2021-06-11 04:20:57 · 2755 阅读 · 0 评论 -
gsl有时正常执行,有时导致程序闪退
废话不多说,经过追踪源码,得到解决方案:// 在调用gsl函数之前执行下列代码gsl_set_error_handler_off();原创 2021-05-07 23:25:35 · 246 阅读 · 0 评论 -
rapidjson生成的json字符串中有乱码
问题就出在这个类型:template<typename CharType>class GenericStringRef;这个类型就像他的名字一样,是内容的引用。对于字符串类型,它不分配内存,所以传入的指针直接是拷贝。对于临时变量的std::string传入的存在条件:临时变量的生命周期必须延续到此GenericStringRef对象的生命周期结束。注意GenericStringRef是支持拷贝的,也就是与此相关联的对象的声明名周期结束才算结束!相比其它json库,r.原创 2021-05-01 03:23:10 · 1635 阅读 · 2 评论 -
qt5静态链接openssl错误处理
1、q_X509_free”: 找不到标识符打开$(QT_SOURCE_DIR)/qtbase/src/network/ssl目录,打开qsslcertificate_p.h,在QT_BEGIN_NAMESPACE上一行添加:#include "qsslsocket_openssl_symbols_p.h"添加后2、derdata": 不是"qsslcertificateprivate"的成员同样是这个文件,定位到下面语句所在行 bool subjectMatch...原创 2021-04-28 02:56:55 · 750 阅读 · 0 评论 -
QSettings读取的utf8中文是乱码
创建settings对象后需要设置一下:settings.setIniCodec("UTF-8");获取字符串时:auto&& strValue = QString::fromUtf8(settings.value(strNamePrefix).toByteArray()));这时strValue就不是乱码了。原创 2020-12-28 16:29:11 · 2310 阅读 · 0 评论 -
AVFrame转QImage最佳方法
直接代码:直接写入QImage内存// 创建QImage img (pFrame->width, pFrame->height, QImage::Format_RGB888);uint8_t* dst[] = { img.bits() };int dstStride[4];// AV_PIX_FMT_RGB24 对应于 QImage::Format_RGB888av_image_fill_linesizes(dstStride, AV_PIX_FMT_RGB24, pFrame原创 2020-12-24 00:28:02 · 2551 阅读 · 0 评论 -
解决Invalid return value 0 for stream protocol
如果不使用文件作为输入,而是使用自定义的(内存)输入流,会看到此运行时警告。解决方法:在读取函数中如果输入流(内存数据),读取完毕返回-1。出现Invalid return value 0 for stream protocol的原因就是无有效数据时,返回的时0.int read(void *opaque, unsigned char *buf, int buf_size){ // 如果输入流(内存数据),读取完毕返回-1 // 如果还未到输入流结尾,则返回实际读取数据长度!..原创 2020-12-23 15:10:05 · 2043 阅读 · 1 评论 -
C++获取重载成员运算符函数指针地址
有如下语句:class CTestObject{public: bool operator()(int, int, float) const { return false; } bool operator( )(int, float) { return false; }};void Test( ){ CTestObject obj; std::function<bool(int,float)> f; f = obj; // 正确 f =原创 2020-09-03 21:21:57 · 709 阅读 · 0 评论 -
visual studio配置 新版 ffmpeg 开发环境
1、下载编译好的ffmpeg库https://ffmpeg.zeranoe.com/builds/选择想使用的库的类型。我这里使用动态库。需要下载Shared和Dev这2个2、打开visual studio,新建任意类型的C/C++工程3、配置工程属性追加工程的头文件路径:$(Dev_DIR)/include (下载的Dev项解压出来的include文件夹) 追加预编译宏:__STDC_CONSTANT_MACROS和__STDC_FORMAT_MACROS 追加库文件路..原创 2020-07-10 13:34:23 · 1517 阅读 · 0 评论 -
glColorMaterial 和 glMaterial 的区别
直接代码说明吧。1、在使用(固定管线的)光照后,这2个函数才生效glEnable( GL_LIGHTING );/// 设置光源属性///...2、使用glMaterial指定3D模型的材质,以环境光颜色为例glm::vec4 ambientColor(1.0f,0.0f,0.0f,1.0f);glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT, &ambientColor.x );3、与2等价的效果:使用glColorMateri.原创 2020-07-07 19:42:15 · 1896 阅读 · 0 评论 -
编译opencv3.4.10,使用cmake生成工程文件时,ffmpeg和ippicv下载失败
直接下载以下文件(本人下载并整理好的),直接放到opencv3.2.10根目录下的.cache文件夹(如果你的目录下已经存在.cache文件夹,直接合并并覆盖):过检查CMakeDownloadLog.txt文件,手动下载1、下载ffmpeg64.dll下载https://raw.githubusercontent.com/opencv/opencv_3rdparty/e81ccda615672833b578c6cefdb859ad69c560ba/ffmpeg/o...原创 2020-07-04 13:48:53 · 1497 阅读 · 3 评论 -
visual studio编译boost1.73.0静态库32位和64位
使用vs2015编译32位REM 使用vs2015,如果vs2019将下面的vc14替换为vc142(特殊:--toolset=msvc-14.2CALL bootstrap vc14CALL b2 stage --build-dir=build/vc14_32 --toolset=msvc-14.0 address-model=32 --without-python --stagedir=vc14/32 link=static runtime-link=shared runtime-link=s原创 2020-07-01 19:06:10 · 1046 阅读 · 0 评论 -
Qt使用触屏对图片进行平移和缩放
1、对需要响应触屏的窗口 激活触屏事件//使用触屏的窗口激活触屏事件setAttribute(Qt::WA_AcceptTouchEvents,true);2、重写event函数//在 bool event( QEvent* e); 中过滤 bool XXXTouchWidget::event( QEvent* e ) /*override*/{ switch( e ->type( ) ) { case QEvent::TouchBegin: case QE原创 2020-06-29 16:09:16 · 2256 阅读 · 1 评论 -
Qt光栅操作:绘制反色文本和反色线条
使用光栅操作// 背景色取反painter.setCompositionMode( QPainter::RasterOp_SourceAndNotDestination );画笔必须设置为白色/// 设置画笔用白色(必须为白色)painter.setPen( Qt::white );// 绘制线条painter.drawLine( QPoint(0,0), rect().bottomRight()) ;// 绘制文字painter.drawText( rect(), Qt:原创 2020-06-25 13:26:19 · 1275 阅读 · 0 评论 -
解决:warning LNK4217:本地定义的符号xxxx在函数 _main 中导入
解决方法:xxxx函数前的__declspec(dllimport) 去掉。出现原因:__declspec(dllimport) 必须用于从动态库对应的Lib中导入符号才会用到。如果是静态库或者直接源码链接,则必须把__declspec(dllimport)去掉,否则警告。...原创 2020-05-28 12:32:35 · 5750 阅读 · 0 评论 -
解决:C运行时检测到应用程序在堆内存末尾之外写入 CRT detected that the application wrote to memory after end of heap buffer
如果是程序内存越界访问,请自行管理越界。如果程序内存管理无误,那么请按下面方式解决:先清理,再重新编译。原因:在头文件中增加成员导致代码变化,编译器不会检测(编译器只检测cpp变化确定是否需要重新生成目标文件)。在头文件中增加程序会导致对象的内存增加,此时是不会重新编译的,除非也改变了需要编译的c/cpp文件。这就导致了这个运行时错误。通过重新编译工程,所有的目标文件重新生成,解决此问题。...原创 2020-05-11 11:38:04 · 1252 阅读 · 0 评论 -
sqlite查询表格是否已经存在
直接判断:/** * @brief 查询sqlite数据库中的指定表格是否存在 * @param pSqlite3DB 已经打开的sqlite数据库对象 * @param pszTableName 要查询的表格名 * @return 表格存在返回true,参数错误或表格不存在返回false,在返回错误时请查阅日志。 * @code * //... * assert( D...原创 2020-04-10 11:57:35 · 1102 阅读 · 0 评论 -
sqlite向表格中插入新字段
先检查是字段否存已经在,不存在再执行插入。代码:/** * @brief 向sqlite数据表格中加入新字段(列) * @param pSqlite3DB sqlite数据库对象 * @param pszTable 目标表格名字 * @param pszColumn 目标列名字 * @param pszType 目标列的类型 * @return 执行插入成功或目标表格中指定...原创 2020-04-10 11:37:35 · 2385 阅读 · 0 评论 -
socket的非阻塞connect
使用通用的启用FIONBIO阻塞和禁用阻塞达到目的。代码如下:////socket header////others#if !defined(INVALID_SOCKET)#define INVALID_SOCKET (SOCKET)(~0)#endif#if !defined(SOCKET_ERROR)#define SOCKET_ERROR (...原创 2020-03-31 08:39:38 · 290 阅读 · 0 评论 -
OpenGL 屏幕坐标系与世界坐标系的相互转换
转自nehe的教程:Using gluUnProjecthttp://nehe.gamedev.net/article/using_gluunproject/16013/CVector3 GetOGLPos(int x, int y){ GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[1...原创 2020-01-04 08:31:57 · 4995 阅读 · 0 评论 -
c++运行时错误:Runtime error:Pure Virtual Function Call
C++规则:C++编译器禁止构造有纯虚函数的类对象,所以出现这类错误一定不是有纯虚函数的存在。原因分析如下:1、对象析构顺序:派生类--》基类。2、所以如果在基类的析构函数中调用派生类重写的函数,就会发生这样的Pure Virtual Function Call错误。举例:多线程程序设计中,基类通过"模板方法"创建一套程序框架,同时基类在析构函数中结束所有线程这就...原创 2019-12-27 10:41:30 · 2527 阅读 · 0 评论 -
Modbus TCP 读写COIL(BOOL),Register(int/float)的c++代码
这几天做Modbus的PLC控制,实现代码:BOOL读取#define SIGN_ID (1)int readBool( unsigned short nAddr ){//读取COIL(BOOL)数据 //nAddr = 1; unsigned char buf[12]; unsigned char chHByte = HIBYTE(nAddr); unsigned ch...原创 2019-12-12 14:49:37 · 3980 阅读 · 1 评论 -
C/C++基本类型32位和64位字节大小
虽然用处不多,但在做32和64位的底层通信时可以用。32位sizeof(char)=1sizeof(short)=2sizeof(int)=4sizeof(long)=4sizeof(float)=4sizeof(double)=8sizeof(long long)=8sizeof(long double)=8sizeof(void*)=464位sizeof(...原创 2019-11-15 10:45:50 · 473 阅读 · 0 评论 -
排序算法的选择
没有一种算法显然是“最佳”算法。这取决于一系列因素。 首先,能将数据放入主内存吗?如果你能,那么需要依赖外部排序算法。这些算法通常基于快速排序(quicksort)和归并排序(mergesort),【译注:如果不能,根据使用的数据集的大小和类型,使用专用数据库加载数据或利用Google的BigQuery等基于云的服务】。 其次,输入数据的分布是什么样的?如果它大多数都是有序的,那...翻译 2018-11-06 10:09:27 · 1542 阅读 · 0 评论 -
如何检查,可执行程序,是debug模式?还是release模式?
Generally no.There hasn't a reliable way to do this with a native DLL file.Even you would be able to check what versions of system libraries a program is linked with and it's the debug version, c...原创 2018-11-03 13:22:22 · 2582 阅读 · 0 评论 -
debug 使用 release 的可执行程序
You can certainly pass STL objects across DLL boundaries but all involved dlls/exes must be compiled using the same compiler and the same compilation options.Remember that most of the STL code is i...原创 2018-11-03 13:06:43 · 444 阅读 · 0 评论 -
cout输出到文件
static std::ofstream g_log("out.log");然后在初始化时:std::cout.rdbuf(g_log.rdbuf());std::cout.rdbuf(g_log.rdbuf());转载 2018-10-23 14:53:22 · 3157 阅读 · 0 评论