[英]occasional *** stack smashing detected*** with c++
我有以下用於冒泡排序的 C++ 代碼。 此代碼編譯沒有任何錯誤,但是當我重新編譯並運行時,我得到
***檢測到堆棧粉碎***:終止
作為一個 C++ newby 我想知道,為什么運行時會出現這些偶發錯誤?
void bubbleSort(int eatenPanCakes[10],int arrSize){
int temp=0;
for(int i=0;i<arrSize-1;i++){
for (int j = 0; j < arrSize-i; j++)
{
if (eatenPanCakes[j] > eatenPanCakes[j+1])
{
temp = eatenPanCakes[j+1];
eatenPanCakes[j+1] = eatenPanCakes[j];
eatenPanCakes[j] = temp;
}
}
}
}
環境: g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
我的代碼中有一個錯誤: for (int j = 0; j+1 < arrSize-i; j++)
將是正確的算法,並且可以正常工作。
您的程序正在訪問超出其大小的數組,這是未定義的行為。 檢查此循環for
:
for (int j = 0; j < arrSize-i; j++)
[我相信, arrSize
值是10
,因為eatenPanCakes
數組的類型是int [10]
] 。
當i
為0
時, arrSize-i
值為10
並且在最后一次迭代中,當j
值為9
時,此語句
if (eatenPanCakes[j] > eatenPanCakes[j+1])
訪問eatenPanCakes
數組的第j+1
個元素,它是索引10
處的元素。 請注意,大小為10
的數組將具有從0
到9
的有效索引。
相反, for
循環中的條件應該是
for (int j = 0; j < arrSize - i - 1; j++)
^^^
因為第j
個元素與數組中它前面的元素進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.