看板 EE_DSnP 關於我們 聯絡資訊
※ 引述《ilway25 (唉唷喂)》之銘言: : 今天在用這兩個實作時,遇到一大堆問題,因此又想了一大堆... : 以下是其中的一個想法: : 以作業中的 AdtTestObj 來說,是沒有的。 : 但是,如果那個 Class 的 assignment operator 有做事情的話, : 用 memcpy 結果不得而知。 : 結論是:不可以用 memcpy。 : 但就這次作業而言,到底可不可以求速而用 memcpy 呢? 我指的是,如果我們不是放 AdtTestObj, 而是要把 adt 做得更通用的話,不應該用 memcpy 吧? 如下面的程式: #include <iostream> #include <vector> #include <cstring> using namespace std; int main() { string b; { string a = "test"; memcpy(&b, &a, sizeof(a)); } string c = "123"; cout << b << endl; return 0; } 不但 cout 出 b 的內容變成 123,結束時還出現 double free。 所以我不打算在作業中用 memcpy or memmove @@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.245.11
goodword:我想會出錯最大的原因應該是 string 內應該是char* 吧 05/22 23:27
goodword:然後你的變數a 只在那個scope內 05/22 23:27
goodword:然後又宣告一個變數c 當然c的位置就是用a的位置了 05/22 23:28
goodword:我說錯了 string a 的destructor 應該有把test delete掉 05/22 23:29
ilway25:所以adt如果用memcpy,那麼我們放string進去,就會爆了!! 05/22 23:29
goodword:然後123 又寫上去同一塊位置 但b又是複製4個過去 05/22 23:31
goodword:所以最後1格 就double free了 在b的destructor 05/22 23:32
goodword:嗯嗯 應該是這樣 所以我在作業中也都沒用那兩個啊 05/22 23:32
ric2k1:對耶... 嗯, 以後要改寫了... 05/23 00:38