编译warning处理
发表于|更新于|工作笔记
|总字数:42|阅读时长:1分钟|浏览量:
子类指针强转至父类会出现字节未对齐的warning,如果想去掉编译warning只需要先将子类转至void*,再强转到父类
文章作者: ciiki
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ciiki的博客!
相关推荐

2024-11-29
C++带返回值类型函数不加return引发的血案
背景写的代码在x64上单元测试一点问题没有,交叉编译出aarch64架构程序,跑在测试那里一开就崩,查了半天竟然是没有加return引发的血案… 调试过程函数调用funca,调用完funca后本应该回到调用函数,但gdb查core却看到奇怪的堆栈信息funcb在funca之上,且崩在funcb里,这里简单写个小demo测试了一下(当然这个demo不会崩,因为没有访问成员变量) 123456789101112131415161718192021#include <iostream>using namespace std;int funca(){ cout << "this is func A" << endl; //return 0;}int funcb(){ cout << "this is func B" << endl; return 0;}int main(){ funca(); retur...

2024-10-14
内存重叠问题
今天开发中偶遇一个问题,程序乱崩溃,偶尔崩在new对象里,偶尔崩在对象释放里,甚至访问局部int变量也崩过,gdb显示不出更多有用信息,最后才定位到内存重叠问题 原始代码比较复杂,简化后就是下面的模型 12char arr[9];memcpy(&arr[0], &arr[3], sizeof(char)*6); 本意是节省点内存,直接用arr指向的内存,显然这里拷贝时存在重叠部分。阅读文档才知道原来memcpy不支持内存重叠的拷贝,之前还不知道。(搜索关键词 memcpy overlap) memcpy 内存重叠会引发未定义问题,这也就是程序乱崩的原因 解决方案是换成memmove即可,或者新申请块内存,拷贝至新内存再拷回去

2022-11-22
vector用法
首先要包含头文件<vector> 1234567891011vector<int>t;t.push_back(5);t.push_back(10);//find()为<algorithm>里的查找函数,返回查找目标的地址, iterator也是一种地址指针vector<int>::iterator it = find(t.begin(), t.end(), 10);int index = (int)(it - t.begin());

2025-04-14
MSYS2配置C++开发环境
记得之前写过一篇文章 《windows下编译libopus》 ,当时提到MSYS2未能成功编译libopus,最近又试了下,没问题了。。。yysy,突然发现MSYS2太好用了,尤其是pacman 安装MSYS2MSYS2官网:https://www.msys2.org/ 下载安装包,安装即可 windows上选择UCRT64就行了,也是官方推荐的环境 配置环境变量安装完成后,打开MSYS2,输入以下命令更新组件库 1pacman -Syu 更新系统,然后安装toolchain 12pacman -S mingw-w64-ucrt-x86_64-toolchainpacman -S mingw-w64-ucrt-x86_64-gdb 配置makemsys64/ucrt64/bin 下mingw32-make.exe,复制一份,改名为make.exe,这样就可以直接使用make命令了 配置CMake不要 pacman -S mingw-w64-ucrt-x86_64-cmake 因为这样安装的cmake功能很有限,用不了MinGW Makefiles 工具链 去 https://...

2023-06-18
逆波兰表达式
逆波兰表达式又称作后缀表达式,是一种便于计算机运算的数学表达式,我们日常使用的中缀表达式需要用括号确定优先级,而后缀表达式是不需要括号的 中缀表达式转后缀表达式手写实现转换比如想把(3+5)*4+6/(8-5)转为后缀表达式 为所有运算符加括号 (3+5)*4+6/(8-5)—–>(((3+5)*4)+(6/(8-5))) 将运算符移至")"之后 (((3+5)*4)+(6/(8-5)))—–>(((35)+4)*(6(85)-)/)+ 去除所有括号 (((35)+4)*(6(85)-)/)+—–>35+4*685-/+ 即最终结果为35+4*685-/+ C++实现转换1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495...

2022-11-29
64位Linux编译32位程序
查看系统架构 123uname -mlscpucat /proc/cpuinfo 然后需要修改64位makefile中的两处位置,第一为修改依赖库为32位的库,第二为给gcc后加上-m32的参数 file a.out查看输出程序是64-bit还是32-bit
评论
公告
This is my Blog




