原创 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()