解決了昨天的析構函數問題...

解決了昨天的析構函數問題...

4 人贊了文章

建議看這個鏈接:

作業部落 Cmd Markdown 編輯閱讀器?

www.zybuluo.com圖標

因為知乎和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究竟有什麼用?
教授說沒有寫過一千行代碼就別想上大公司,這種說法對嗎?

TAG:CC | 指針編程 | 演算法 |