[問題] g++跟valgrind是不是有bug啊?

看板C_and_CPP作者 (激動)時間10年前 (2014/02/20 15:56), 編輯推噓1(1014)
留言15則, 9人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux g++ -std=c++0x 問題(Question): 寫程式 常常瘋狂用new 跟 delete 常常會遇到一加某個new之後 就會遇到問題 (valgrind會出現invalid write 有時還會segmentation fault) 舉例 沒問題 版本一 在code的某一處 int *a; int *b; int *c; 在另外一處 a = new int[x]; // x是一個正整數 b = new int[x]; c = new int[x]; 在另外一處 delete [] a; delete [] b; delete [] c; 此時這樣下去跑 程式執行的很正常 valgrind的 vglog也不會出現任何錯誤訊息 但多加一個new 版本二 在code的某一處 int *a; int *b; int *c; int *d; 在另外一處 a = new int[x]; // x是一個正整數 b = new int[x]; c = new int[x]; d = new int[x]; 在另外一處 delete [] a; delete [] b; delete [] c; delete [] d; 那個vglog 就會出現invalid write 出現的那部分 會是在 "第一次對那個指標做assignment的時候" 例如 有先給他等於NULL 再new 那這個invalid write錯誤就會在=NULL的那行 如果是宣告完 直接new 就會在new的那邊有invalid write的錯誤 甚至有的時候 這樣程式執行起來 就會有segmentation fault 神奇的是 後來我想到compiler的問題 特別安裝新一點版本的g++ 改成是g++-4.7 去compile 就沒問題了 (vglog沒任何錯誤訊息 執行起來也沒segmentation fault) 然後又有一次遇到這問題 又裝了g++-4.8 去compile 就沒問題了 自從改用4.8的版本之後 一陣子都沒問題 結果今天又遇到這問題 (跟往前遇到問題的 是完全不同的code) 反而g++ 跟 g++-4.7 又可以了 所以這怎麼辦... 總不能每次都看compiler心情吧... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.154.37

02/20 16:10, , 1F
有沒有完整的程式可以測的?
02/20 16:10, 1F
程式很大很亂 現在是我朋友遇到這問題 有Makefile 有測資 有.h 等 要跟他要檔案 把所有檔案附上來嗎? 目前他又遇到 是 g++-4.8可以 g++-4.7可以 只是 多宣告一個 int **var; var = NULL; 這樣

02/20 16:14, , 2F
new 失敗?
02/20 16:14, 2F
不是 凡是只要是對那個指標 做assignment 就會失敗 ※ 編輯: JiDung 來自: 140.116.154.37 (02/20 16:42)

02/20 17:38, , 3F
比較有可能是 valgrind 的問題
02/20 17:38, 3F

02/20 20:11, , 4F
人活得好好的為什麼要用new
02/20 20:11, 4F

02/21 09:01, , 5F
版主的意思是STL?
02/21 09:01, 5F

02/21 19:13, , 6F
跟STL無關, 你這樣太籠統看不出問題, 會不會是x太大
02/21 19:13, 6F

02/21 20:39, , 7F
我的建議是: 全用vector. 用了如果valgrind還會該, 再
02/21 20:39, 7F

02/21 20:40, , 8F
來討論這個問題. 寫C++沒用RAII很奇怪, 很多人都是為
02/21 20:40, 8F

02/21 20:42, , 9F
了省轉型把new當malloc()來用. 這種delete一卡車的碼
02/21 20:42, 9F

02/21 20:43, , 10F
很難修的.
02/21 20:43, 10F

02/21 20:45, , 11F
不過現在會開始提倡用deque來當預設容器啦
02/21 20:45, 11F

02/21 23:07, , 12F
請問特別選用 deque 的原因是什麼呢?
02/21 23:07, 12F

02/28 15:26, , 13F
對vector 當中有vector 不是很熟 尤其是很多維的時候...Orz
02/28 15:26, 13F

03/02 17:54, , 14F
程式有處理signal或用到thread?
03/02 17:54, 14F

03/08 11:36, , 15F
沒有
03/08 11:36, 15F
文章代碼(AID): #1J1RL2DH (C_and_CPP)