日韩性视频-久久久蜜桃-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

總結

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

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

主站蜘蛛池模板: 97色伦97色伦国产欧美空 | 黄色裸体视频 | www.亚洲人 | 天堂在线一区二区 | 日韩和的一区二区 | 91高清在线视频 | 欧美视频一 | 久久99影院 | 超碰2022 | 在线观看日本中文字幕 | 成人28深夜影院 | 超碰91在线 | 国产黄色片在线免费观看 | 国产免费一级视频 | 天天国产视频 | 色婷婷综合久久 | 日剧大尺度床戏做爰 | 香蕉成视频人app下载安装 | 香蕉视频在线免费播放 | 国产精品一区二区黑人巨大 | 西野翔之公侵犯中文字幕 | 日韩影院一区二区 | 免费吃奶摸下激烈视频 | xxxx色| 免费的黄色av | 国精产品一区一区三区有限公司杨 | 91.久久| 欧美日韩久 | 男人的天堂av网 | 亚洲 欧美 中文字幕 | 午夜视频网站在线观看 | 男生女生搞鸡视频 | 亚洲第二页 | 2022天天操| 国产ts在线 | 国内精品久久久久久久久久 | 亚洲偷自 | 国产区精品在线观看 | 亚洲精品aa | 99精品视频一区二区 | 国产一区二区三区久久 | 岛国av一区二区 | 亚洲欧美自偷自拍 | 欧美精品久久久久久久免费 | 日批在线视频 | 人妻一区二区三区 | 99久久久无码国产精品衣服 | 一级黄色免费毛片 | 久久午夜夜伦鲁鲁片 | 黄色福利片 | 欧美在线网站 | 精品无码三级在线观看视频 | av播播| h视频免费在线 | 裸体美女免费视频网站 | 狂野欧美性猛交免费视频 | wwwjavhd| 激情视频在线免费观看 | 欧美成年人在线视频 | 中文字幕一区二区在线老色批影视 | 九九精品在线观看 | 1000部多毛熟女毛茸茸 | 99热麻豆| 国产欧美一区二区精品性色 | 青青国产精品视频 | 国产精品探花一区二区三区 | 欧美69久成人做爰视频 | 亚洲乱仑 | 国语对白做受欧美 | 亚洲爱v| 日本黄色片一级 | 在线国产三级 | 91九色国产视频 | 日本一级做a爱片 | 天堂成人 | 亚洲一二三av | 国产 日韩 欧美 精品 | av狠狠操 | 91精产国品 | 日本a级黄| 三级在线网站 | 日韩精品极品视频在线观看免费 | 成人精品一区二区 | 日韩在线视频播放 | 国产骚b | 国产毛片一区 | 宅男在线视频 | 三年中文在线观看免费观看 | 欲求不满的岳中文字幕 | 真人一及毛片 | 最好看的电影2019中文字幕 | 性欧美一区| 青草一区二区 | 亚洲区av| 九九九九九九精品 | 国产高中女学生第一次 | 国产精品无码在线播放 | 国产精品理论在线观看 | 天天碰天天干 |