<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[oooooome的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/oooooome</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; oooooome]]></copyright><item><title><![CDATA[AVFrame的数据填充方式]]></title><link>https://blog.youkuaiyun.com/oooooome/article/details/111993911</link><guid>https://blog.youkuaiyun.com/oooooome/article/details/111993911</guid><author>oooooome</author><pubDate>Wed, 30 Dec 2020 16:49:43 +0800</pubDate><description><![CDATA[我们知道平时使用AVFrame这个数据结构时，首先需要调用av_frame_alloc()对其进行初始化，初始化后的数据里data数组和buf数组都是空的，也就是说初始化后不会填充一个默认图像数据（毕竟初始化时不需要知道图片的任何信息）。

我平时使用的AVframe填充数据的方式为av_image_fill_arrays，先自己申请一段内存空间tmpBuffer，然后填充到目标frame中，但是这种方式常常会由于疏忽释放tmpBuffer而导致内存泄漏。
//填充
int frameSize = av_i]]></description><category></category></item><item><title><![CDATA[字节序学习]]></title><link>https://blog.youkuaiyun.com/oooooome/article/details/108993804</link><guid>https://blog.youkuaiyun.com/oooooome/article/details/108993804</guid><author>oooooome</author><pubDate>Sat, 10 Oct 2020 11:28:21 +0800</pubDate><description><![CDATA[字节序是指当一个数据的长度超过一个字节时的存储顺序。
比如一个int型的数据，所占的字节数为4，那么在存储的时候第一个字节的地址为0x00B8F9F0，这个int数据占用的四个字节的地址为0x00B8F9F0，0x00B8F9F1，0x00B8F9F2，0x00B8F9F3。但是对于a的四个字节的存储顺序，在不同的处理器上可能是不同的。
对于存储顺序，分为大端序和小端序
小端序（Little-Endian）：低位字节排放在内存的低地址端，高位字节排放在内存的高地址端。
大端序（Big-Endian）：高位字]]></description><category></category></item><item><title><![CDATA[void指针]]></title><link>https://blog.youkuaiyun.com/oooooome/article/details/108993786</link><guid>https://blog.youkuaiyun.com/oooooome/article/details/108993786</guid><author>oooooome</author><pubDate>Sat, 10 Oct 2020 11:26:12 +0800</pubDate><description><![CDATA[指针指向的是内存中的一个地址，对于指针的操作通常包括解引用和算数运算
指针的解引用是从指针指向的地址开始向后读取，读取的长度为指针的类型，例如，int型指针解引用时向后读取4个字节，double型则是向后读取8个字节。
指针的运算，比如
int *a;
a++;

这个操作是将指针指向的地址向后移了一个数据类型对应的长度，这个例子中，指针向后移了sizeof(int)这么多个字节
同样void指针也是指向一块存储区域的开头，只不过它没有固定的类型。
一方面，由于没有固定的数据类型，所以可以不用强制类型转换地]]></description><category></category></item><item><title><![CDATA[C和C++文件的写入和读出方式]]></title><link>https://blog.youkuaiyun.com/oooooome/article/details/108993738</link><guid>https://blog.youkuaiyun.com/oooooome/article/details/108993738</guid><author>oooooome</author><pubDate>Sat, 10 Oct 2020 11:25:09 +0800</pubDate><description><![CDATA[在C中提供了对设备上文件调用的底层接口
文件写入
C中提供的打开文件的函数FILE *fopen( const char * filename, const char * mode )
其中filename是文件名，mode是对文件的操作，下表为常见的mode值
对于文件的写入，常用的有四种方式
int fputc( int c, FILE *fp );
可以存入单个字符，如果写入成功，会返回写入字符的ASCII码值，如果发生错误，则会返回 EOF。
int fputs( const char *s, FI]]></description><category></category></item><item><title><![CDATA[对于左值和右值的理解]]></title><link>https://blog.youkuaiyun.com/oooooome/article/details/108993658</link><guid>https://blog.youkuaiyun.com/oooooome/article/details/108993658</guid><author>oooooome</author><pubDate>Sat, 10 Oct 2020 11:22:35 +0800</pubDate><description><![CDATA[在编译的时候，偶尔会碰到关于左值或者右值的错误。查了一下关于这方面的介绍，记录一下。
C++中左值（lvalue）和右值（rvalue）的概念是从C继承来的。
在C中，左值通常表示赋值符号左边的值，右值通常表示赋值符号右边的值。
左值通常为带有名字的变量，有固定的内存来存储，在程序中能够通过这个名字寻址；右值一般是运算操作或者函数返回的一个临时值，没有办法获取到他的地址
int a = 5;		//1
int b = fun();	//2
int c = (a + b);	//3

比如上面这段代码，第一行]]></description><category></category></item><item><title><![CDATA[在类中起线程调用类里的成员函数]]></title><link>https://blog.youkuaiyun.com/oooooome/article/details/108993492</link><guid>https://blog.youkuaiyun.com/oooooome/article/details/108993492</guid><author>oooooome</author><pubDate>Sat, 10 Oct 2020 11:15:49 +0800</pubDate><description><![CDATA[检查连接流程中，需要不断发送和接收socket消息，由于socket在发送和接收udp的过程是阻塞的，所以打算分别启动两个线程用来发送和接收socket的消息。
这里记录一下启动线程调用类中的成员函数的方式
如果在类里面启动线程调用成员函数，则直接将成员函数的地址和this指针传入线程，其他参数传入方式不变
class MyClass
{
public:
	int a;
	void th1() {
		std::cout &lt;&lt; "print hello" &lt;&lt; std::endl;
]]></description><category></category></item><item><title><![CDATA[解决vs2019中cmake报找不到编译器错误]]></title><link>https://blog.youkuaiyun.com/oooooome/article/details/105368779</link><guid>https://blog.youkuaiyun.com/oooooome/article/details/105368779</guid><author>oooooome</author><pubDate>Tue, 07 Apr 2020 17:11:50 +0800</pubDate><description><![CDATA[方案一
windows + cmake + vs2019 编程
这个方案可以暂时解决以上问题，但是他是将原有工程重新编译，生成一个新的vs工程。
虽然新生成的工程能够编译和运行，但是工程的结构会和原来的工程有很大差异，多了很多东西，如果只是写自己的项目，可以用这种方案。但是如果是团队开发，不推荐！

方案二
简单粗暴，重装系统即可

...]]></description><category></category></item><item><title><![CDATA[windows + cmake + vs2019 编程]]></title><link>https://blog.youkuaiyun.com/oooooome/article/details/105368488</link><guid>https://blog.youkuaiyun.com/oooooome/article/details/105368488</guid><author>oooooome</author><pubDate>Tue, 07 Apr 2020 16:57:32 +0800</pubDate><description><![CDATA[1.安装minGW64
2.安装cmake
3.安装vs2019
4.组建代码文件结构：

5.在build 文件下打开git bash，执行一下指令
cmake .. -G"Visual Studio 16 2019"&nbsp; &nbsp; &nbsp;
tips( vs2017 对应 cmake .. -G"Visual Studio 15&nbsp;2017"&nbsp; &nbsp;)...]]></description><category></category></item></channel></rss>