
hello world
Heworld_guo
printf("hello world\n");
展开
-
C/C++子线程exit(0)退出时崩溃产生core文件
问题:程序中某个单例类在收到特殊信号后回调用exit(0)退出整个程序,但退出时总是产生core文件,文件不大,打开core文件堆栈都是些问号。只能review代码找bug。最后发现是线程资源没有回收,以下面这段代码分析下崩溃的原因。以上代码看似人畜无害,实则运行就崩。如果将static test aa;去掉static,也不会蹦,但C++中单例一般都是申明个静态变量,返回其引用,这样会导致这个变量在程序退出的最后才析构,所以走不到析构的joinI()语句,即使走到,不是他的父线...原创 2022-03-19 16:21:36 · 2659 阅读 · 1 评论 -
std::bad_alloc 异常产生原因之一
const std::string &test(){ return "123456";}void main(){ auto str = test();}调用上面的test()函数就会产生std::bad_alloc 异常,原因是return时构造了内容为123456的std::string变量,返回引用后变量就被析构了,再访问这个引用就会出现这个异常。总结:const std::string &用来返回类的成员变量时效率高,不用重新构造返回的std:.原创 2021-10-11 14:56:42 · 14818 阅读 · 0 评论 -
协程库libgo原理探究hook原理
前言:最近学习使用协程,网上搜索一番,大多是讲协程在多个任务间切换有多好用,可能是我功底太薄,愣是摸索了很久才搞懂。现在分享下新手学习心得。结论:对称协程就相当于状态机,各个协程就是各个任务,执行到阻塞操作时,比如sleep,调度的线程并不是真的一头扎进sleep函数,然后线程挂起,而是将这个任务设置为挂起状态,然后线程返回,执行其他任务去了,等sleep的时间到了,再调度过来执行后面的代码。很显然,sleep已经不是原来的sleep了,这儿是使用了hook函数(见hook函数解释)。那线程返回了.原创 2021-04-21 16:22:11 · 1213 阅读 · 0 评论 -
C++删除迭代器两种方法对比(list.erase(it++)和it=list.erase(it))
C++ STL容器初学使用时,遍历删除某值元素一定要注意以下几点:错误示范:修改方法一:修改方法二:两种正确编码对其它STL容器一样有效,区别在于: 第一种修改是 it 先++,指向下一个迭代器,再释放之前的迭代器,类似于:因为是值传递,在节点被析构之前,it已经安全地跳转到下一个节点,这里强调一下,值传递原因,erase函数调用和it++是同时的,可能和编译器有关,代码理论上是先调用完函数再做++操作,可能代码在将it值赋值到传参时就回头做++了,之后再执行erase里原创 2020-07-21 11:32:12 · 5131 阅读 · 0 评论 -
C++简单实现Base64的编解码
Base64是个很简单的将数据编码为可见字符的算法。就是将原始数据每6个位取出来,找一个可见字符代替,这样4个可见字符刚好可以代替原来的3个字节,原理不多说,直接上代码。PS:代码只实现对可见字符的加解密,不可打印的还要修改。#include <string>using namespace std;string Code("ABCDEFGHIJKLMNOPQRSTUVWX...原创 2019-12-31 15:31:57 · 779 阅读 · 1 评论 -
windows下sapi做TTS转化(修复)总结
TTS转换有很多第三方库,比如科大讯飞的sdk就很好用,但是对于一些简单的需求,用windows(win7)的sapi就可以了。sapi运用是很简单,但是在很多电脑上就上放不出声音,原因是这些电脑系统不是官网下载的,TTS功能被阉割了,本文记录的主要就是修复这个问题。由于不同电脑缺少的语音组件不同,所以试了一堆修复包,也不知道这些修复包谁有用,总之不行全执行一遍就行。为原创 2017-12-23 11:40:06 · 6334 阅读 · 1 评论