<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[oscarjulia的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/oscarjulia</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; oscarjulia]]></copyright><item><title><![CDATA[c++ vector reserve/resize解析]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/74463771</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/74463771</guid><author>oscarjulia</author><pubDate>Wed, 05 Jul 2017 17:43:00 +0800</pubDate><description><![CDATA[写代码的时候无意错用了这两个函数 导致测试的时候，程序运行崩溃 发现这两个函数还是有区别的
void reserve (size_type n);
reserver函数用来给vector预分配存储区大小，即capacity的值 ，但是没有给这段内存进行初始化。reserve 的参数n是推荐预分配内存的大小，实际分配的可能等于或大于这个值，即n大于capacity的值，就会reallocate内]]></description><category></category></item><item><title><![CDATA[C++中的虚析构函数、纯虚析构函数详解]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/74457066</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/74457066</guid><author>oscarjulia</author><pubDate>Wed, 05 Jul 2017 17:18:13 +0800</pubDate><description><![CDATA[C++中析构函数可以为纯虚函数吗?
众所周知，在实现多态的过程中，一般将基类的析构函数设为virtual，以便在delete的时候能够多态的链式调用。那么析构函数是否可以设为纯虚呢？
class CBase
{
    public:
        CBase()
       {
            printf("CBase()\n");
       }
    virtual ~]]></description><category></category></item><item><title><![CDATA[Linux段错误及GDB Coredump调试方法]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/74256997</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/74256997</guid><author>oscarjulia</author><pubDate>Mon, 03 Jul 2017 19:16:29 +0800</pubDate><description><![CDATA[最近在Linux环境下做C语言项目，由于是在一个原有项目基础之上进行二次开发，而且项目工程庞大复杂，出现了不少问题，其中遇到最多、花费时间最长的问题就是著名的“段错误”（Segmentation Fault）。借此机会系统学习了一下，这里对Linux环境下的段错误做个小结，方便以后同类问题的排查与解决。
1. 段错误是什么
一句话来说，段错误是指访问的内存超出了系统给这个程序所设定的内存空间，]]></description><category></category></item><item><title><![CDATA[栈溢出分析]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/74202121</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/74202121</guid><author>oscarjulia</author><pubDate>Mon, 03 Jul 2017 15:28:56 +0800</pubDate><description><![CDATA[栈溢出

栈是从高地址向低地址方向增涨，堆的方向相反。
在一次函数调用中，栈中将被依次压入：参数，返回地址，EBP。如果函数有局部变量，接下来，就在栈中开辟相应的空间以构造变量。
在C语言程序中，参数的压栈顺序是反向的。比如func(a,b,c)。在参数入栈的时候，是：先压c，再压b,最后a。在取参数的时候，由于栈的先入后 出，先取栈顶的a，再取b,最后取c。
C语言是不作栈溢出检查，如]]></description><category></category></item><item><title><![CDATA[linux符号表简介]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/73835918</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/73835918</guid><author>oscarjulia</author><pubDate>Wed, 28 Jun 2017 11:48:56 +0800</pubDate><description><![CDATA[既然在链接时，需要重定位目标文件中引用的外部符号，显然，链接器需要知道这些符号的定义在哪里，为此汇编器在每个目标文件中创建了一个符号表，符号表中记录了这个模块定义的可以提供给其他模块引用的全局符号。可以使用工具readelf查看文件中的符号表，如目标文件foo2.o的符号表如下：
root@baisheng:~/demo# readelf -s foo2.o
Symbol table '.sy]]></description><category></category></item><item><title><![CDATA[内存布局深度好文]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/73835868</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/73835868</guid><author>oscarjulia</author><pubDate>Wed, 28 Jun 2017 11:44:42 +0800</pubDate><description><![CDATA[对任何一个普通C++程序来讲，它都会涉及到5种不同的数据段。常用的几个数据段种包含有“程序代码段”、“程序数据段”、“程序堆栈段”等。不错，这几种数据段都在其中，但除了以上几种数据段之外，进程还另外包含两种数据段。下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区。




代码段：代码段是用来存放可执行文件的操作指令，也就是说是它是可执行程序在内存种的镜像。代码段需要防]]></description><category></category></item><item><title><![CDATA[ctrl+c,ctrl+d,ctrl+z在linux程序中意义和区别]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/72853084</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/72853084</guid><author>oscarjulia</author><pubDate>Sat, 03 Jun 2017 16:59:02 +0800</pubDate><description><![CDATA[ctrl+c,ctrl+d,ctrl+z在linux程序中意义和区别

ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样.

 

ctrl+c是强制中断程序的执行,,进程已经终止。

 

ctrl+z的是将任务中止（暂停的意思）,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务,fg命令重新启动前台被中断]]></description><category></category></item><item><title><![CDATA[fgets() 与 gets()]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/72638122</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/72638122</guid><author>oscarjulia</author><pubDate>Tue, 23 May 2017 11:30:16 +0800</pubDate><description><![CDATA[首先看看函数原型： char* fgets(char *s, int n, FILE *stream); char* gets(char *s);一般使用fgets函数，都是读取文件当中的n-1个字符到s中，其实，此函数还有一个很好的用处就是从标准输入流中读取字符串，而且不用担心输入的字符个数超出了字符数组的大小而导致溢出的问题！要怎样做呢？如下： char str[10]; fgets(str,]]></description><category></category></item><item><title><![CDATA[fopen与open的区别（好文）]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/72638060</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/72638060</guid><author>oscarjulia</author><pubDate>Tue, 23 May 2017 11:21:11 +0800</pubDate><description><![CDATA[参考文章：http://www.cnblogs.com/hnrainll/archive/2011/09/16/2178706.html
http://www.cnblogs.com/joeblackzqq/archive/2011/04/11/2013010.html



[cpp] 
view plain 
copy 


int open(const char *pat]]></description><category></category></item><item><title><![CDATA[Linux内建命令(built-in)与外部命令]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/72461375</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/72461375</guid><author>oscarjulia</author><pubDate>Thu, 18 May 2017 11:39:24 +0800</pubDate><description><![CDATA[原文网址：http://blog.youkuaiyun.com/taohuaxinmu123/article/details/10845001

Linux命令有内部命令（内建命令）和外部命令之分，内部命令和外部命令功能基本相同，但也有些细微差别。
内部命令实际上是shell程序的一部分，其中包含的是一些比较简单的linux系统命令，这些命令由shell程序识别并在shell程序内部完成运行，通常在li]]></description><category></category></item><item><title><![CDATA[TCP的状态迁移]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/70304948</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/70304948</guid><author>oscarjulia</author><pubDate>Thu, 20 Apr 2017 21:05:26 +0800</pubDate><description><![CDATA[TCP的状态迁移不复杂。 
TCP有11个状态，这些状态在TCP的三次握手和四次挥手里面都牵涉到。这些状态之间的迁移就是三次握手和四次挥手的过程。 
再回顾一下三次握手和四次挥手的过程吧http://blog.youkuaiyun.com/u010902721/article/details/45955681

然后对照着看。 
 
先看图下方的图例，实线表示客户端的状态迁移图，虚线表示服务器的状]]></description><category></category></item><item><title><![CDATA[Linux shell中运行可执行程序后加上&的作用]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/70272445</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/70272445</guid><author>oscarjulia</author><pubDate>Thu, 20 Apr 2017 17:05:29 +0800</pubDate><description><![CDATA[学习UNP时，学到了在命令后加上字符“&”后，退出shell，运行的命令可以继续运行。不解原因，并到网上搜索了以下，明白了！
以下是搜索到的片段：

& 放在启动参数后面表示设置此进程为后台进程
默认情况下，进程是前台进程，这时就把Shell给占据了，我们无法进行其他操作，对于那些没有交互的进程，很多时候，我们希望将其在后台启动，可以在启动参数的时候加一个'&'实现这个目的。
如：
t]]></description><category></category></item><item><title><![CDATA[(DUP!) ping现象]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/70232471</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/70232471</guid><author>oscarjulia</author><pubDate>Tue, 18 Apr 2017 20:43:05 +0800</pubDate><description><![CDATA[64 bytes from 10.70.70.3: icmp_seq=177 ttl=61 time=22.3 ms
64 bytes from 10.70.70.3: icmp_seq=177 ttl=61 time=24.1 ms (DUP!)
64 bytes from 10.70.70.3: icmp_seq=178 ttl=61 time=23.5 ms
64 bytes from]]></description><category></category></item><item><title><![CDATA[理解this指针]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/70156241</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/70156241</guid><author>oscarjulia</author><pubDate>Thu, 13 Apr 2017 11:16:48 +0800</pubDate><description><![CDATA[1. this指针的用处:
一个对象的this指针并不是对象本身的一部分，不会影响sizeof(对象)的结果。this作用域是在类内部，当在类的非静态成员函数中访问类的非静态成员的时候，编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说，即使你没有写上this指针，编译器在编译的时候也是加上this的，它作为非静态成员函数的隐含形参，对各成员的访问均通过this进行。
     ]]></description><category></category></item><item><title><![CDATA[函数指针初始化和调用的几种方法]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/70147502</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/70147502</guid><author>oscarjulia</author><pubDate>Wed, 12 Apr 2017 21:03:35 +0800</pubDate><description><![CDATA[文章转自：http://blog.youkuaiyun.com/zongyinhu/article/details/48790555

看如下代码，然后思考如下几个问题：



[cpp] 
view plain 
copy 
print?


"font-family:KaiTi_GB2312;font-size:18px;">#include  #include  using na]]></description><category></category></item><item><title><![CDATA[函数声明后面的const用法]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/53743314</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/53743314</guid><author>oscarjulia</author><pubDate>Mon, 19 Dec 2016 16:47:28 +0800</pubDate><description><![CDATA[void function() const{}
通常我们会看到一些函数声明后面会跟着一个const，这个const是做什么的呢？
看一下下面的例子，就知道了。直接在编译前，就会提示下面的两个错误


// test1107.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
using namespace std;

class ]]></description><category></category></item><item><title><![CDATA[java中的堆栈]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/52754423</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/52754423</guid><author>oscarjulia</author><pubDate>Sat, 08 Oct 2016 10:23:44 +0800</pubDate><description><![CDATA[Java把内存分成两种，一种叫做栈内存，一种叫做堆内存

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时，java就在栈中为这个变量分配内存空间，当超过变量的作用域后，java会自动释放掉为该变量分配的内存空间，该内存空间可以立刻被另作他用。

堆内存用于存放由new创建的对象和数组。在堆中分配的内存，由java虚拟机自动垃圾回收器]]></description><category></category></item><item><title><![CDATA[C语言实现哈希表（key为字符型）]]></title><link>https://blog.youkuaiyun.com/oscarjulia/article/details/52228487</link><guid>https://blog.youkuaiyun.com/oscarjulia/article/details/52228487</guid><author>oscarjulia</author><pubDate>Wed, 17 Aug 2016 10:24:17 +0800</pubDate><description><![CDATA[简单实现了哈希表的插入和查找功能，简要说明如下：

1、数据结构：

struct HashNode

{

            char* sKey;     //键

            int nValue;      //值

            HashNode* pNext; //当Hash值冲突时，指向HASH值相同的下一个节点。

}

]]></description><category></category></item></channel></rss>