原创 IPv4和Ipv6

本博客轉載別人的,還沒經過本人驗證~   IPv4初始化過程: int CClient::InitSocket(CString strIP, short portNum) {     WSADATA wsd; //WSADATA變量  

原创 VS排查和定位內存泄漏

1、什麼是內存泄漏? 內存泄漏指的是在程序裏動態申請的內存在使用完後,沒有進行釋放,導致這部分內存沒有被系統回收,久而久之,可能導致程序內存不斷增大,系統內存不足……引發一系列災難性後果;(關於程序申請內存分配方式,詳見:內存分配方式)

原创 redis lua : command keys must In same slot

redis集羣中報錯 command keys must In same slot,原因是集羣中是用多keys的eval語句,訪問的redis數據不一定在同一個slot槽中(槽就是redis數據存儲的索引號或者分組號) 解決方法是:red

原创 C++程序卡死的幾種原因

1.很常見的原因:for while 死循環; for(;;); while(true); while(1); 2.遞歸調用死循環; 3.對帶有STL類對象的變量進行memset/ZeroMemory,比如vector/map/li

原创 go 類型系統

Go雖然是面向對象編程,但Go沒有函數的繼承語法,而是支持給任何類型(不包括指針類型)增加新方法的語法,只需要實現該接口要求的所有方法即可。   直接看以下幾個代碼例子 //例:給內置類型 int 添加Less方法 type Inte

原创 SAL註釋

規律總結: _In_,_Out_:都必須是有效的; _z_:指針所指向的字符串必須有結束符;   =============================================   _In_z_:帶結束符的字符串指針;   _

原创 任意長度十進制字符串轉十六進制字符串

所謂十進制轉換十六進制,其實就是要了解轉換原理,再把數學邏輯翻譯成代碼邏輯; 比如十進制字符串 "12345678" 轉換之後爲 "BC614E"; 順帶普及下十六進制值: 十六進制,顧名思義,就是每個字符位的取值範圍爲 0~15; 其

原创 帶返回值的接口寫法

假定接口需要返回一個指針,且可能涉及某些條件判斷,不一定能獲取到有效指針,大部分人寫法如下: // 根據條件判斷是否返回有效值 Pointer* GetPtr(void) { if(xxx1) return nu

原创 go 類型的值語義和引用語義

Go語言重大部分類型都是基於值語義,包括: 1.基本類型:byte,int,bool,float32,float64,string等; 2.複合類型:數組array,結構體struct,指針pointer等;   重點來了,C/C++中,

原创 編譯:無法解析外部符號

以下可能原因: a)代碼中調用的函數只有聲明,沒有實現; b)項目包含某些頭文件,但未鏈接或加載相應的dll或lib庫;

原创 go 成員可見性

Go沒有像C++類中的private protected public關鍵字,而是根據成員的首字母大小寫來決定是否對其他包(package)可見;   首字母大寫:公開,可見; 首字母小寫:私有,其他包不可訪問;   package "

原创 C++ 可能存在的內存泄漏問題(個人經驗總結)

1.幾乎所有程序員都知道的,使用new申請的內存,已不再使用卻沒被delete; 破解之道: 方法很多, 最基礎方法就是程序員自己注意 new 和 delete 配套出現; 比較高級一點的,就是模仿智能指針,使用引用計數器; 2.

原创 簡易分析UTF8和UNICODE轉換關係(std::string如何存儲漢字)

首先要強調,耐心看完! 第一:必須知道的是,每個數字 字母 符號 中文 火星文 特殊符號,都有對應的編號,比如在ASCII表中可以找到,字母'A'的編號是65,'%'的編號是37,當然ASCII表中只能找到編號在255以內所對應的數字 字

原创 windows git 克隆域名被解析爲 127.0.0.1

如題,想從 https://margo.sh/GoSublime 克隆項目代碼,但使用 Git CMD 執行 git clone https://margo.sh/GoSublime 時,連接失敗; 可能是安裝git的時候,某些設置弄錯了

原创 Go 網絡編程:Socket編程

傳統編程語言的Socket設計流程: 1.創建socket:socekt(); 2.綁定socekt:bind(); 3.監聽:listen(); 4.連接:connect(); 5.接受:accept(); 6.接受:receive()