[問題] struct和vector的問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenGL
問題(Question):
http://codepad.org/z81QroL4
在這份程式碼裡面,我定義了Mesh這個structure
用create_box()這個函式製造一個Mesh物件
然後用draw_model()將Mesh顯示出來
用法大概是這樣
在宣告全域變數的地方:
Mesh* modelbox1;
在init函式:
create_box(modelbox1, 1, 0.5, 2, 0.5);
然後在display函式:
draw_model(modelbox1);
但是現在發生了奇怪的問題
就是在執行到draw_model的for迴圈的時候
會發生memory violation
http://imageshack.us/photo/my-images/11/programerror1.jpg/
即使我把for迴圈裡面的內容都註解掉了還是會發生一樣的問題
個人猜測是vi.size()的調用出了問題
可能是在全部push_back完後少加了一個什麼東西,讓size無法運作
(像字串最後要加'\0'之類的)
但是查了網路上很多資料,size()都只有說是裡面元素的數量而已
沒有找到和我一樣的狀況
想請問一下我在vector或struct的使用上到底是出了什麼問題
導致這樣的錯誤呢?
在此先感謝各位的回答
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 68.99.86.102
→
10/02 12:24, , 1F
10/02 12:24, 1F
→
10/02 12:24, , 2F
10/02 12:24, 2F
→
10/02 12:25, , 3F
10/02 12:25, 3F
感謝回答
但是想請問一下如果要改成create_box(Mesh& boxmodel, ...)的話
create_box(modelbox1, ...)這行要怎麼改才行呢?
我試著將new的那行拿出來
然後把這行改成create_box(&modelbox1, ...)或是create_box(*modelbox1, ...)
結果都有其他error出現
※ 編輯: hcl012 來自: 68.99.86.102 (10/02 12:33)
→
10/02 12:42, , 4F
10/02 12:42, 4F
→
10/02 12:42, , 5F
10/02 12:42, 5F
→
10/02 12:46, , 6F
10/02 12:46, 6F
→
10/02 12:47, , 7F
10/02 12:47, 7F
→
10/02 12:51, , 8F
10/02 12:51, 8F
剛才試著用void create_box(Mesh *&boxmodel, ...)
結果也出現了memory violation
不一樣的是這次有顯示錯誤發生的位置是在vector的第783行
_SCL_SECURE_VALIDATE_RANGE(_Pos < size());這裡
剛才我試著用Printf印出vi.size()的值
結果有成功印出來,代表size的提取沒有問題
但是不知道為什麼還是沒辦法把內容畫出來
要用這個結構的主要原因是,這是某個model loader裡面的架構
如果要改成class的話那要連整個model loader都重寫(汗
※ 編輯: hcl012 來自: 68.99.86.102 (10/02 13:01)
推
10/02 13:35, , 9F
10/02 13:35, 9F
→
10/02 13:37, , 10F
10/02 13:37, 10F
→
10/02 13:38, , 11F
10/02 13:38, 11F
→
10/02 13:39, , 12F
10/02 13:39, 12F
剛才檢查了一下model loader
在vertex index讀取的地方都有減一過
因為obj檔的index是從1開始算的,我疏忽了這點就直接將index放到mesh裡面
結果vector index是從0開始算的,結果就讀超過範圍了
經修正後程式已經可以正常運作
很感謝兩位板友的幫助m(_ _)m
※ 編輯: hcl012 來自: 68.99.86.102 (10/02 13:52)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
11
38