[問題] vector 與 new 之釋放問題
問題(Question):
1. 使用 new、vector , 不確定會不會有 memory leak 問題
2. 使用 new 失敗時該怎麼抓?使用 vector 失敗時又該怎麼抓?
程式碼(Code): (請善用置底文標色功能)
/* ------- vector -------- */
vector<vector<int>> arr; // arr[ROW][COL]
arr.clear();
arr.resize(ROW);
for(i=0; i<ROW; i++)
arr[i].resize(COL); // -------> 配失敗的話要怎麼抓?
// do something
arr.clean(); // -------> 會不會只有清一層而已?
/* ------- new -------- */
int ***a = new int**[x];
for(i=0; i<x; i++) {
a[i]=new int*[y];
for(j=0; j<y; j++){
a[i][j] = new int[z]; // -------> 配失敗的話要怎麼抓?
}
}
delete [] a; // -------> 這裡是三層全清嗎?
補充說明(Supplement):
1.
一維的都好辦,但二維以上就不是很清楚,
而 memory leak 又不會抓,
請問這麼做會不會有 memory leak 問題?
還是要像 C language 一層一層去 free?
2.
近來處理幾四、五千筆資料,如果單純讀進、讀出的話是沒問題
但如果用 string* pid = new string[DATA_CNT] 反而讀不出來
(當然不只這個 pointer, 還有其它 pointer, 扣除 string 部份
其餘基本的也才吃
4000 * 8bytes(double) * 5(5個double) = 160k
所以在想是不是 string 那裡用 new 的不適合?
就吃的空間而言,改用 char buffer[DATA_CNT][LEN] 會好些嗎?
謝謝大家的協助, 小弟感激不盡 !!!!
--
If there is no tomorrow,
I want to see u last time.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.142
※ 編輯: EdisonX 來自: 180.177.76.142 (01/10 23:28)
推
01/10 23:29, , 1F
01/10 23:29, 1F
→
01/10 23:29, , 2F
01/10 23:29, 2F
→
01/10 23:30, , 3F
01/10 23:30, 3F
→
01/10 23:31, , 4F
01/10 23:31, 4F
→
01/10 23:31, , 5F
01/10 23:31, 5F
謝謝 l 大說明,
請教 new 那裡是這麼做的嗎?
for(i=0; i<x; i++){
for(j=0; j<y; j++) delete [] a[i][j];
delete [] a[i];
}
delete [] a;
再次感謝。
※ 編輯: EdisonX 來自: 180.177.76.142 (01/10 23:37)
→
01/11 00:00, , 6F
01/11 00:00, 6F
→
01/11 00:02, , 7F
01/11 00:02, 7F
推
01/13 00:40, , 8F
01/13 00:40, 8F
→
01/13 00:40, , 9F
01/13 00:40, 9F
→
01/13 01:36, , 10F
01/13 01:36, 10F
※ 編輯: EdisonX 來自: 180.177.76.161 (05/12 00:51)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章