C C 中size t潛在的問題

2022-05-08 08:57:22 字數 805 閱讀 5847

在c++中,利用陣列下標訪問陣列元素時,常常將下標型別定義為size_t型別,因為正常來說,陣列的下標就是size_t型別。例如這樣:

for (size_t i = 0; i < container.size(); ++i)

然而具體來說,size_t是乙個和機器相關的unsigned型別。重點就在於... size_t是乙個unsigned型別的數值型別。因而,在c/c++中涉及到size_t和int型資料轉換傳遞時,就需要注意...

儘管這個問題經常被老師和書籍指出來需要重視,然而今天還是踩了坑...

如下,是我寫的乙個快排(quicksort),實現對std::vector中的元素(型別由模板確定)進行公升序排序(預設該型別定義了<=, >符號操作):

在程式執行時就會發現,這個**... 偶爾會出現問題(怪我資料規模設定得小,給了它正確的機會...)。

找了好久都沒找到... (哭...),然後用xcode監測了一下(這裡吹一下xcode,因為我暫時還不太會用lldb...)。終於,發現了問題,就是中第12行: 當j值為0時,再自減,就會變成乙個很大的數值,自然就陣列越界了... (當然,陣列下標為任意負值時,也會導致這個問題,因此直接導致出現這種問題的原因,也是陣列越界)

目前的解決方法是將這些size_t老老實實地定義成了int型別,暫時搞定了這個bug...

以後有好的辦法再重整(zhěng)...

@編輯於2019.3.1

C C 中size t 的用法

size t在c語言中就有了。它是一種 整型 型別,裡面儲存的是乙個整數,就像int,long那樣。這種整數用來記錄乙個大小 size size t的全稱應該是size type,就是說 一種用來記錄大小的資料型別 通常我們用sizeof 操作,這個操作所得到的結果就是size t型別。因為size...

OpenJudge誰是你的潛在朋友C C

描述 臭味相投 這是我們描述朋友時喜歡用的詞彙。兩個人是朋友通常意味著他們存在著許多共同的興趣。然而作為乙個宅男,你發現自己與他人相互了解的機會並不太多。幸運的是,你意外得到了乙份北大圖書館的圖書借閱記錄,於是你挑燈熬夜地程式設計,想從中發現潛在的朋友。首先你對借閱記錄進行了一番整理,把n個讀者依次...

C C 中的 問題

符號是c c 之中非常有趣的,前段時間發現乙個很好玩的算式,在tc和vc下面獲得不同的結果。i 0 i i i i 熟悉c語言的能夠分析一下,首先是i 0,i的初值為0,第二步是很多個 號,我們大致可以推導下它的執行過程 先執行第乙個 i,i 1,然後 i,i 2,繼續 i,i 3,最後再進行 計算...