[問題] g++跟valgrind是不是有bug啊?
開發平台(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
02/20 16:14, 2F
不是
凡是只要是對那個指標 做assignment 就會失敗
※ 編輯: JiDung 來自: 140.116.154.37 (02/20 16:42)
→
02/20 17:38, , 3F
02/20 17:38, 3F
→
02/20 20:11, , 4F
02/20 20:11, 4F
→
02/21 09:01, , 5F
02/21 09:01, 5F
→
02/21 19:13, , 6F
02/21 19:13, 6F
→
02/21 20:39, , 7F
02/21 20:39, 7F
→
02/21 20:40, , 8F
02/21 20:40, 8F
→
02/21 20:42, , 9F
02/21 20:42, 9F
→
02/21 20:43, , 10F
02/21 20:43, 10F
→
02/21 20:45, , 11F
02/21 20:45, 11F
→
02/21 23:07, , 12F
02/21 23:07, 12F
→
02/28 15:26, , 13F
02/28 15:26, 13F
→
03/02 17:54, , 14F
03/02 17:54, 14F
→
03/08 11:36, , 15F
03/08 11:36, 15F