日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

析构函数与运行错误

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 析构函数与运行错误 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??今天在做數據結構的實驗課作業時,突然一直運行錯誤,可我檢查了幾次代碼,也沒有發現哪里有錯(也并沒有經常導致運行錯誤的,數組越界那些),經過20min左右的試探和摸索,終于發現了這次運行錯誤的時間,并且,還和析構函數有些關系

?

?(而且,最尷尬的是,在我發現以后,我才想起來,這個錯誤在我學C++的時候就犯過了,當時我還在自己的代碼上注釋過這個錯誤,強調以后要注意)…

?

然而到學數據結構時,居然印象已經不太深刻了…故寫此博文,一方面,以后自己再犯這個錯,可以快速找到;另一方面,如果有人不幸踩到這個坑,也許他們能從這篇中有一二啟發。

?

? 題目:





我最初的代碼(DevC上正常運行,但在oj上報錯):


#include <iostream> #include <cstring> using namespace std; const int ok = 0; const int error = -1; const int maxn = 1e3 + 5; int data[maxn];class SeqList { private:int *list;int maxsize;int size; public:SeqList(){maxsize = 1000;size = 0;list = new int[maxsize];}void init(int n){size = n;for (int i = 0; i < n; i++) cin >> list[i];}~SeqList(){delete[]list;}void list_display(){cout << size << " ";for (int i = 0; i < size; i++) cout << list[i] << " ";cout << endl;}friend void MergeList(SeqList a, SeqList b, SeqList &c); };void MergeList(SeqList a, SeqList b, SeqList &c) {int s_a = a.size, s_b = b.size, i, j, k;c.size = s_a + s_b;for (i = 0, j = 0, k = 0; i < s_a && j < s_b; ){if (a.list[i] < b.list[j]) c.list[k++] = a.list[i++];else c.list[k++] = b.list[j++];}while (i < s_a) c.list[k++] = a.list[i++];while (j < s_b) c.list[k++] = b.list[j++]; }int main() {SeqList temp1, temp2, ans;int size;cin >> size;temp1.init(size);cin >> size;temp2.init(size);MergeList(temp1, temp2, ans);ans.list_display();return 0; }



報錯信息:

/* Runtime Error:[ERROR] A Not allowed system call: runid:143894 callid:146*** glibc detected *** ./Main: double free or corruption (!prev): 0x084c1650 *** Runtime Error:[ERROR] A Not allowed system call: runid:143894 callid:146*** glibc detected *** ./Main: double free or corruption (!prev): 0x08b64650 *** 輔助解釋: A Not allowed system call: runid:143894 :使用了系統禁止的操作系統調用,看看是否越權訪問了文件或進程等資源*/

報錯頁面截圖:


? 百思不得其解,我就開始搜這些錯誤提示,然而搜了十幾分鐘,也一無所獲,他們提到的數組越界等問題,我也沒有,而對于ans列表,我也有給它的list數組動態分配足夠大的空間。我仔仔細細檢查了幾次,還是覺得自己找不到錯(此處對我當時的無知進行了美化,其實我當時是覺得,我應該沒錯吧,好像是oj錯了)


? 就在這時,突然想到了上學期學C++的類時,經常容易在析構函數上犯錯,于是屏蔽了析構函數,提交一次





? 發現屏蔽析構函數以后,居然就沒有運行錯了,可謂是又驚又喜....

? 接下來我仔細想了想,這兩種到底有什么區別,為什么沒有析構就能通過,這時我突然想起


? 因為我在 MergeList中,傳入的參數 a 和 b 都是按照值傳遞的方式傳遞的,既然為值傳遞,作為臨時變量,傳參時會自動調用構造函數,返回時,會自動調用參數的析構函數...(而析構函數,本來是不會清楚動態分配的空間的,但既然我重寫了析構,那new出來的數組空間,肯定都被析構掉了)


? 可是,有一個很嚴重的問題是,a 和 b 作為參數傳入時,它們的list數組,和主函數中的 temp1 和 temp2 的list數組,是共享空間的。而主函數與逆行完以后,temp1 和 temp2 必定也會調用析構函數,就相當于把同一個空間,析構了兩次,自然會有運行錯誤


? 那么,有沒有什么方法能避免這個錯誤呢?

??

? 當然是有的~

? 1. ?首先,如果不寫析構函數就行,就如我的上一張截圖,不自己寫,默認的析構函數,是不會析構動態分配的空間的,雖然這種做法,畢竟還是不合適,但它確實可以避免許多問題


? (BTW,在這里說一下,重寫析構函數以后,真的需要萬事小心,我現在突然想起來,當初學C++的類時,幾乎所有的錯誤,都是出現在析構函數上的,每次一屏蔽它就沒事,不然就一直有錯誤)



? 2. ?更加推薦的處理方法時,將 a 和 b 用引用的方式傳遞為參數,這樣a和b就不是臨時對象,函數也就不會在返回時,自動調用它們的析構函數了,就像這樣



? const只是避免自己不小心改了不該改的a和b,不加也行,關鍵是一定要加上引用

? 而且這個方法還有一個除了避免出錯之外的好處,就是...運行速度更快了,從8變成了0


? 從這個故事中,得到了一個教訓:

? 經常踩的坑,也還是應該好好記錄整理下來。想當初,踩了那么多次析構函數的坑,出了那么多次運行錯誤,我以為印象深刻到,隨時都能想起來的地步了。然而,今天還是找了很久才發現


? 因此,特開博客的“經驗教訓”分類,以記下我在編程上遇到的,比較特別,或者比較值得記錄下來的錯誤,并記下自己當時是怎么解決的。


轉載于:https://www.cnblogs.com/mofushaohua/p/7789415.html

總結

以上是生活随笔為你收集整理的析构函数与运行错误的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99久久综合网 | 免费一区二区三区视频在线 | 日本在线三级 | 婷婷六月网| 中文在线а√在线8 | 亚洲成人自拍 | 九草网 | 国产国语对白 | 爱福利视频广场 | 岛国av大片 | 日韩精品xxx | 亚洲欧美日韩不卡 | 日韩电影在线观看一区二区 | 天天操狠狠操夜夜操 | 成人爽a毛片一区二区免费 日本高清免费看 | 欧美成人精品欧美一级乱黄 | 久久久久久久麻豆 | 国产成人麻豆免费观看 | 日韩一级视频 | 国产成人91精品 | 嫩草社区| 欧美久久久久久久久久久久 | 搡老熟女老女人一区二区 | 中文字幕乱码av | 国产精品无码天天爽视频 | 一级黄色性生活片 | 久久久6 | 在线播放精品视频 | 久草国产在线观看 | 日韩中文欧美 | 亚洲婷婷一区 | 黄色aa级片 | 国产五月 | 91老司机在线 | 毛片福利视频 | 日韩视频在线播放 | 日韩欧美aⅴ综合网站发布 国产成人一区二区三区小说 | 男女超爽视频免费播放 | 日韩免费视频一区 | 欧美午夜精品 | 被警察猛c猛男男男 | 亚洲最大av| 99热首页 | 天天色天天色 | 无码久久精品国产亚洲av影片 | 久久精品一区二区三区黑人印度 | 天天射日日干 | 日本一区二区三区成人 | 天天干天天干天天干天天 | 无码专区久久综合久中文字幕 | videos另类灌满极品另类 | 日本一二三区在线视频 | 精品动漫一区二区三区的观看方式 | 97精品国产97久久久久久春色 | 四虎成人精品永久免费av | 91视频在线免费观看 | 草逼国产 | 米奇7777狠狠狠狠视频 | 一级中文片 | 日韩无砖 | 亚洲偷自 | 久久精品视频播放 | 日本二区在线观看 | 免费无遮挡无码永久视频 | 尤物在线观看视频 | 北条麻妃一二三区 | 免费av在线播放网址 | 神马久久久久久久久久久 | 老司机午夜免费精品视频 | 少妇欧美激情一区二区三区 | www.com欧美| 麻豆激情视频 | 骚虎免费视频 | 国产中文字幕三区 | 99视频99| 少妇荡乳情欲办公室456视频 | 夜夜操天天操 | 成人在线免费看片 | 秋霞午夜 | 人人澡人人澡人人澡 | 中国少妇无码专区 | 久久精品美女 | 亚洲精品国产精品国自产网站按摩 | 欧色av| 亚洲一区二区偷拍 | 国产人妻黑人一区二区三区 | www黄色片网站 | 精品人妻无码一区二区三区换脸 | www久久久| 日本国产一级片 | avtt2015| 久久99久久99精品中文字幕 | 日韩在线黄色 | 妺妺窝人体色www婷婷 | 福利在线一区 | 亚洲精品尤物 | 欧洲色av| 日本三级韩国三级三级a级中文 | 人妖干美女 |