第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

FlatBuffers 的多語言集成問題

FlatBuffers 的多語言集成問題

Go
慕斯王 2023-05-08 14:42:13
問題當(dāng)我嘗試訪問包含從一個客戶端流式傳輸?shù)椒?wù)器的消息的緩沖區(qū)的一部分(使用創(chuàng)建)時,我panic: runtime error: slice bounds out of range從生成的服務(wù)器文件中反復(fù)出現(xiàn)崩潰( )。 這個問題只出現(xiàn)在客戶端和服務(wù)器端集成的時候。自己測試,client和server都使用成功,server沒有crash 知道: - 發(fā)送和接收是一樣的,(排除通信方式的問題) - 之前發(fā)送的數(shù)據(jù)格式正確它被放入'并發(fā)送。 是什么原因造成的?flatbuffersflatbuffersflatbuffers// see the boundary tests belowbyte[]flatbuffersbuffer問題上下文和詳細(xì)信息我有c++ 一個go 使用FlatBuffers. _客戶端和服務(wù)器都有自動邊界測試,確認(rèn)它們各自“正確地”使用flatbuffers它們應(yīng)該的方式。(即客戶端在發(fā)送緩沖區(qū)之前創(chuàng)建緩沖區(qū),服務(wù)器在訪問緩沖區(qū)之前接收緩沖區(qū))這些測試有效。我們正在使用FlatBuffers-v1.10.0我的問題是,當(dāng)它們一起使用時,服務(wù)器在訪問緩沖區(qū)時 總是出現(xiàn)以下錯誤:panic: runtime error: slice bounds out of range  goroutine 19 [running]:github.com/google/flatbuffers/go.(*Table).GetVOffsetT(...)     /home/.../go/github.com/google/flatbuffers/go/table.go:134github.com/google/flatbuffers/go.(*Table).OffsetT(0x4000045c68, 0x4000000004, 0x4000160008)     /home/.../go/github.com/google/flatbuffers/go/table.go:16 +0xf0github.com/PhantomIntelligence/Server/lib/Protocol/Stream.(*StreamedData).Id(0x4000045c68, 0x4000045c68)     /home/.../go/github.com/PhantomIntelligence/Server/lib/Protocol/Stream/SteamedData.go:30 +0x2cgithub.com/PhantomIntelligence/Server/dataAccess/conversion/flatBuffers.ConvertStreamMessage(0x4000015a000, 0xa7c, 0xe00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)     /home/.../go/github.com/PhantomIntelligence/Server/dataAccess/conversion/flatBuffers/deserialization.go:55 +0x1fc... // the rest is irrelevant for this question's purpose 導(dǎo)致崩潰的數(shù)據(jù)當(dāng)服務(wù)器嘗試訪問它以使用它時,崩潰總是發(fā)生在服務(wù)器接收到的第一個緩沖區(qū)上。更具體地說,它總是在嘗試訪問ContainerData7th 的(0th, 12th or 15th) 時發(fā)生Container。知道對于這個用例,我們發(fā)送一個帶有 16 個容器的StreamedData,每個容器包含 16 個ContainerData代碼詳情請注意,只有結(jié)構(gòu)保留在我的原始實現(xiàn)中。我不能泄露我們處理的數(shù)據(jù)的性質(zhì)。因此對象名稱可能看起來很奇怪,但結(jié)構(gòu)是相關(guān)的部分。架構(gòu)編譯客戶c++ 端在編譯期間運(yùn)行它:flatc -o lib/ --no-js-exports --no-prefix --scoped-enums --cpp schemas/*.fbs服務(wù)器在編譯期間運(yùn)行它 go :flatc -o lib/ --no-js-exports --no-prefix --scoped-enums --go schemas/*.fbs圖式客戶端和服務(wù)器都使用以下模式:請注意,此摘錄不是完整的架構(gòu),只是與此問題相關(guān)的部分。
查看完整描述

2 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗 獲得超13個贊

不確定這是否是整個問題,但快速瀏覽一下convertStreamMessage就會發(fā)現(xiàn)一個主要問題:這FlatBufferBuilder是一個超出范圍的局部變量,就像您返回指向其正在被破壞的內(nèi)部數(shù)據(jù)的原始指針一樣。

您要么希望確保FlatBufferBuilder發(fā)送數(shù)據(jù)后仍然存在,要么改為用作FlatBufferBuilder::Release()返回值。

另請注意,在調(diào)試這些問題時,您可以使用 C++ 驗證程序(或任何讀取數(shù)據(jù)的代碼)在發(fā)送數(shù)據(jù)之前檢查數(shù)據(jù),這樣可以更早地發(fā)現(xiàn)此問題。


查看完整回答
反對 回復(fù) 2023-05-08
?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗 獲得超7個贊

最后解決我的問題的只是增加客戶中生成器的初始緩沖區(qū)大小。

似乎當(dāng)構(gòu)建器調(diào)整大小時,位于初始緩沖區(qū)末尾(在動態(tài)調(diào)整大小之前)旁邊的 2 個字節(jié)未被使用或丟失了數(shù)據(jù)。

我在客戶端使用的測試數(shù)據(jù)沒有提出這個問題,它的有效負(fù)載比我們使用的真實數(shù)據(jù)小一點,所以當(dāng)測試運(yùn)行時,沒有發(fā)生調(diào)整大小。

查看完整回答
反對 回復(fù) 2023-05-08
  • 2 回答
  • 0 關(guān)注
  • 239 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號