[問題] unhandled exception 的錯誤...

看板C_and_CPP (C/C++)作者 (viable)時間12年前 (2013/12/08 17:46), 編輯推噓5(5024)
留言29則, 7人參與, 最新討論串1/1
俗話說 禍不單行 Bug好像也本著無三不成禮的結伴成群 是這樣的 經過兩個bug解決之後 蟲蟲又本著無三不成禮的精神成群結伴一隻一隻爬了出來 嗚嗚 所以我又來了 這一次的蟲蟲和OpenGL 比較沒有關係 以前還沒用GL時就常出現... 這次出現的錯誤是在run的時候 歷經千辛萬苦的Compile之後 終於0 bug 到了按下run的這個神聖的一刻(氣勢磅礡的背景音樂開始播放) Click一聲 偉大緊張期待已久的一刻 螢幕出現 「Xxx.exe發生問題,必須關閉,僅此致歉。」的對話窗(背景音樂喀然而止) 坐在螢幕前呆愣愣的我於是開始認命的debug點選Go 這時螢幕出現: Unhandled exception in xxx.exe(MSVCRTD.DLL):msvcrtd.dll 0xC0000005: Access Violation. 接著點選確定之後又出現一個對話眶: Please enter the path for STRSTR.ASM。 因為之前有run成功過 所以有點懷疑這個問題不是真的問題 似乎Debug之路注定一波三折 一直到這裡打擾各位大大好像有點不好意思 不過這裡真的是一個溫馨的地方 不知這裡的各位大大對這些錯誤訊息有沒有發覺可能是有什麼狀況的直覺閃過腦海中 請大大指點一下. 謝謝大家!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.175.229.31

12/08 17:58, , 1F
0xC0000005 差不多就是其他地方的 Segmentation Fault
12/08 17:58, 1F

12/08 17:58, , 2F
也就是記憶體存取違規 這種問題的可能原因太多了...
12/08 17:58, 2F

12/08 18:19, , 3F
把所有指標跟陣列都拿掉~
12/08 18:19, 3F

12/08 18:51, , 4F
拿掉指標和陣列將會是浩瀚工程 我在思考 如果 看編譯出來的
12/08 18:51, 4F

12/08 18:52, , 5F
組合語言會有幫助嗎...
12/08 18:52, 5F

12/08 18:59, , 6F
backtrace 查看看吧
12/08 18:59, 6F

12/08 19:04, , 7F
編譯過了最好是沒bug,還有runtime error啊~
12/08 19:04, 7F
嗯 沒有看見runtime error彈出 我再看一次發現還有更前面的地方沒有放break point 放下去之後 看見的確和指標有關 我發現出現輸入strstr.asp路徑訊息的strstr是我之前寫的合併兩個字串用的function char *codedir="J:\\A\\"; char *folder=strstr(codedir,"B\\"); char *XXX =strstr(codedir,"C\\"); char *buldir=strstr(folder,"D\\E.???"); 錯誤出現在這裡的第四行 推測代表folder這個字串再被拿出來使用時出問題 然後我就想不出是什麼問題了 ※ 編輯: viable 來自: 36.237.160.184 (12/08 19:32)

12/08 19:37, , 8F
呃, strstr 不是拿來接字串的吧?!
12/08 19:37, 8F

12/08 19:37, , 9F
那個是拿來尋找子字串的, 找不到時會丟 NULL 回來
12/08 19:37, 9F

12/08 19:37, , 10F
所以第四行拿 NULL 再去找當然會噴錯....
12/08 19:37, 10F

12/08 19:38, , 11F
我覺得你需要的是一個 C 語言入門教學...
12/08 19:38, 11F

12/08 19:40, , 12F
疑?strstr已經有內建的功能了嗎 那我function名字要換一下
12/08 19:40, 12F

12/08 19:44, , 13F
另外還請參考置底第四誡 ._.
12/08 19:44, 13F

12/08 19:47, , 14F
唔...
12/08 19:47, 14F
感覺有道理... 但是我又覺得寫成這樣沒有直接修該到兩個字串 而是使用內建的字串函數編輯 應該不是錯在這邊對不對@@(有快要被毆的感覺) char *strstr(char *t,char *s){ char *tmp; tmp=new char[1000]; strcpy(tmp,t); strcat(tmp,s); return tmp; } ※ 編輯: viable 來自: 36.237.160.184 (12/08 19:54)

12/08 20:05, , 15F
雖然我是用C++字串,但我總覺得樓上這種寫法問題很大...
12/08 20:05, 15F

12/08 20:06, , 16F
通常不會返回函數內new出來的空間,因為不一定有指針接
12/08 20:06, 16F

12/08 20:08, , 17F
萬一沒有指針接住的話就會有洩漏問題了
12/08 20:08, 17F

12/08 20:09, , 18F
如果懶的管理這些記憶體細節,就用C++的string吧
12/08 20:09, 18F

12/08 20:12, , 19F
嗯嗯
12/08 20:12, 19F

12/08 20:15, , 20F
如果想保持這種風格,建議要把return的pointer當成參數
12/08 20:15, 20F

12/08 20:16, , 21F
(看是要用指針的引用還是指針的指針)。而且之後也要free
12/08 20:16, 21F

12/08 20:17, , 22F
或是delete []。
12/08 20:17, 22F

12/08 21:51, , 23F
指標
12/08 21:51, 23F

12/08 23:41, , 24F
另外怎麼能確定你要合併的字串加起來不會過 1000?
12/08 23:41, 24F

12/09 12:39, , 25F
我是覺得超過1000有點難,但每次都1000超浪費的XD
12/09 12:39, 25F

12/09 12:57, , 26F
:D我本來是用100為了確保不是這裡的錯誤 暫時改成1000
12/09 12:57, 26F

12/09 12:58, , 27F
不過我看了推文後改成由兩合併字串長度來給長度
12/09 12:58, 27F

12/09 12:59, , 28F
按照大家的推文de完bug之後 再把冒出來的bug de完 目前
12/09 12:59, 28F

12/09 13:00, , 29F
目前這個卡關已經順利通過了 ^ ^ 謝謝大家
12/09 13:00, 29F
文章代碼(AID): #1If3_SW1 (C_and_CPP)
文章代碼(AID): #1If3_SW1 (C_and_CPP)