指標與引用的一角
2023年09月09日
引用通過指標實現是眾所周知的事情,但是指標和引用配合使用的時候遇到乙個小問題,現記錄於下,以供日後參照。
問題的起因:
通過訊息傳遞的系統,在收到訊息的時候需要解析訊息。最近做了一次修改,把訊息結構體裡的部分內容刪除以後,其中一部分內容改由記憶體拼接的方式傳遞。
簡而言之,假設訊息的名稱為message,message之後緊接著一片記憶體,記憶體當中存放著有用的資訊。而這片記憶體資訊又沒有在訊息結構當中用成員變數去描述之。
訊息的定義struct message;
of cs, mem3是個可以動態增長數量的成員,這也是沒辦法預計message結構體超出末端的記憶體位址的原因。因而也無法為超出末端的記憶體位址起始的隱藏記憶體資訊在message當中正名。我們假設這片記憶體裡存放了若干個mem4. 當然了mem4之前是以某一成員變數的形式存在於message結構體當中的。
問題的表象:
在正式設計好這麼一種機制以後,coding出現問題。解mem4的時候總是出問題,記憶體亂七八糟。在解決了一系列便宜錯位等錯誤之後,證實相對位置不會出現問題後,頭幾個mem4順利解析,後面的mem4全部為0.
問題的分析和經過:
略問題的結果和結論:
經過反覆校對記憶體位址和記憶體狀態,發現問題,很罕見,所以才記了這片日誌。
message訊息在收到以後經過若干次倒手,也就是傳遞。每次傳遞都是採用引用方式傳遞的。簡單的描述如:message* pmsg = getmessage();
handle(*pmsg)//void handle(message& msg);
我們遇到的問題就出在handle2類似的函式裡面。
結論:因為雖然引用通過指標實現,但是畢竟經過一次封裝,內部的實現不可預料,這裡的引用取位址以後並不是原來的指標存放的位址。經過若干次倒手後,指標位址已經改變,裡面還能查出頭幾個mem4成員可能是引用傳遞的物件大小有待考校吧。
校園的一角
早晨的宣傳欄前 王韜正在看一張 haha購物網招聘推銷員 的廣告。不遠處,王韜的女朋友晴晴等得有些不耐煩了。晴晴道 哎呀,那些廣告有什麼好看的,時間不早了,趕緊去圖書館佔位置去啦!王韜的眼睛依舊盯著廣告,說道 再等一會兒啊。晴晴鬧起了小脾氣,道 你不走,我可走了!王韜無奈道 好啦,走,不看啦。王韜邊...
《古城一角》demo,ogre引擎與IOS
古城一角 是用ogre引擎和bullet引擎在蘋果的ipad的開發的 遊戲小demo,全部過程由我自己一人完成,其中資源裡面的人物和動畫是ogre裡面自帶的,場景模型是自己從torque的dts轉化的,屠龍刀是龍之谷裡面的模型。程式logo是我老婆給我設計的,甚是喜歡。1。程式logo 2.ogre...
棋盤缺一角問題
問題的描述很簡單,就是乙個西洋棋的棋盤缺少乙個方格。我們能否使用右邊l的圖案拼出左邊這種棋盤 並且右邊的圖形不可以重疊 這是一道智力測試題,但是我們可以通過程式非常簡潔的處理這個問題。首先,我們希望問題的規模縮小,我們首先將棋盤分成四個部分 這個時候問題出現了,有乙個小部分和其他部分不同,這對我們很...