解決了昨天的析構函數問題...
4 人贊了文章
建議看這個鏈接:
作業部落 Cmd Markdown 編輯閱讀器因為知乎和Cmd Markdown功能不兼容,導致以下效果與原效果存在天壤之別。
# 歡迎使用 來到 我的新世界
今天這篇文章不再是簡單的粘貼複製了,而是我用MarkDown語言寫的、希望自己後面可以做的越來越好。
這裡提一下,所用的模板來自Cmd Markdown 。您可以使用 Cmd Markdown:
- 整理知識,學習筆記
- 發布日記,雜文,所見所想
- 撰寫發布技術文稿(代碼支持)
- 撰寫發布學術論文(LaTeX 公式支持)
以上是該官方對 Cmd MarkDown 的一個簡單介紹,這個真的很簡單易學,大家可以去嘗試一下:
昨天的文章:今天在LeetCode 307寫了個析構函數...
昨天在做LeetCode307的時候(點擊上面標題查看昨天文章),寫了一個析構函數去釋放自己new的內存,結果死活通不過LeetCode檢測, 心情崩潰 。一直提示錯誤:"Runtime Error Message: free(): invalid pointer: 0x00007fd333aee600 **",當然,後面還緊跟了一句"Last executed input:
["NumArray"] [[[]]]*"下面具體來看看看我的代碼。
1. 析構函數代碼:
~NumArray(){ if(tree!=nullptr){ delete [] tree; tree = nullptr; //今天新加了這一句代碼 }}
2. 再來看看構造函數代碼吧!
NumArray(vector<int> nums) { if(nums.size()>0){ n = nums.size(); tree = new int[2*n]; for(int i =0;i<2*n;++i) tree[i] = 0; buildTree(nums); } //else return; 這是昨天這樣寫的 else tree = nullptr; // 今天改正後的代碼 }
經過仔細思考和去網上求證,在析構函數里寫return 語句是不正確的,最直白的說:返回給誰?誰接受呢?那麼,我是 怎麼解決這個報錯的呢?
來看看一個圖吧!
寫到這裡,我相信應該都能明白這個原因了,就是n = 0 時沒有初始化tree指針才導致的無效指針,所以在編程時候,無論什麼語言,大家一定要記得初始化!大家一定要記得初始化!大家一定要記得初始化!
雖然今天一直在找,一直在思考這個錯誤,基本沒幹其它什麼事,不過還是挺值得的。歡迎關注個人微信公眾號liss_H,也歡迎留言和評論,不要吝嗇你的贊哦。
推薦閱讀:
※leetcode里這段強行加快運行速度的C++代碼是什麼意思?
※vector<int>(128,0) 代替 unordered_map<char, int>靠譜嗎?
※C++中this指針什麼情況下是必須要用的?
※C++中的friend究竟有什麼用?
※教授說沒有寫過一千行代碼就別想上大公司,這種說法對嗎?