Re: [問題] 全域物件的解構

看板C_and_CPP作者 (CA)時間15年前 (2011/02/12 00:40), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串2/4 (看更多)
※ 引述《divinity47 (div)》之銘言: : class apple_event: fruit : { : friend int A(); : friend double B(); : friend void C(); // 原本這邊有的五個函式,其中ABC跟問題沒關係 : friend void part_1(); : friend void part_2(); : friend void part_3(); : public: : void get(); : void push(int); : void check(); : ~apple_event() : {delete [] condition;} : private: : int condition[2]; : int flag; : }; : apple_event station[10000]; : 1. 這個函式原本程式可以執行沒有問題 : 可是自從我加入 ~apple_event() : {delete [] condition;} 這兩行 : 之後只要執行到就會錯,請問該如何寫才正確呢? (不加解構兩行就不會有錯) : 是因為condition是陣列的關係嗎? 我看書本上寫說陣列解構不用指名陣列元素數目 : 到底問題是出在那呢 =_= 因為靜態陣列不能解構也不需要解構 你寫成像是 int * condition = new int[2]; 這種的才需要 簡單的說, 有 delete 就一定會有一個 new 對應, 沒有 new 就不需要 delete : 2. 我的station[]是宣告在全域變數的位子,請問不是應該程式全部執行完才會解構嗎? : (或是主程式執行完) : 為什麼我連主程式中的while迴圈都還沒跑完,就出現錯誤了呢? : 請問我的station[]陣列到底是何時建構又何時解構呢? : 書本沒有宣告在全域的位子,所以我讀書的時候一直不是很懂... 複製的動作也有可能會引發解構(舊的消失, 補上新的) 或是你的 part_1 part_2 part_3 有碰到這些動作 : 3. 我的程式有大量的運算,所以每次開始run大概兩三分鐘以後, : 程式速度會慢到讓我在電腦桌前面偷偷打瞌睡....(根本還沒run超過1%...) : 我以為是因為記憶體沒有被釋放掉,一直重複使用、計算的緣故 : 所以想要寫成class,然後用解構去解決這個問題,希望速度可以變快~~(灑花) : 這樣問有點怪...請問我想的是正確的嗎? : 或是有什麼其他原因會造成,程式計算速度越拖越慢呢? 你沒有貼出呼叫的函式內容, 很難判斷 你應該是先用 debugger 先追蹤執行狀況 而不是沒頭沒腦地去改可能不相關的地方 : 4. 我的主程式長這樣 : : int main{ : while (now < end_time) { : switch (event_ID()) { : case 0: : part_1(); : break; : case 1: : part_2(); : break; : case 2: : part_3(); : break; }} : 其中part_1、part_2、part_3都是計算的過程, : 中間也不斷在取用跟存取class裏頭的condition[2]跟flag兩個數值 : 請問我的解構,會不會影響這兩者的計算,我好怕我不小心讓計算錯誤...>_< : 那我該如何寫才能確實釋放記憶體,讓程式變得更完善呢? : 請大大幫幫忙了 ( ̄▽ ̄#)﹏﹏ 不一定是記憶體的問題 ... 有可能跑到無窮迴圈, 無窮遞迴, 超級大量的 cache miss 你最好先確定問題在哪裡再去改它 -- 自High筆記(半荒廢) http://legnaleurc.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.248.119

02/12 00:43, , 1F
我確定不是無窮迴圈或遞迴!
02/12 00:43, 1F

02/12 00:44, , 2F
因為每次只要不小心寫到無窮迴圈,程式5秒就會給我當掉
02/12 00:44, 2F

02/12 00:45, , 3F
另外...請問,我的靜態陣列是不能(也不用)寫解構嗎
02/12 00:45, 3F

02/12 00:46, , 4F
你的 class 不需要解構子
02/12 00:46, 4F

02/12 00:47, , 5F
還有你的確定方式很神奇 orz
02/12 00:47, 5F
文章代碼(AID): #1DLMQ9da (C_and_CPP)
文章代碼(AID): #1DLMQ9da (C_and_CPP)