このコードが正常に動作し、実行時に次のエラーが表示されない:コードを示すエラー***スタックが検出スマッシング***:./a.out終了中断(コアダンプ)
スタックが検出スマッシング:我々はそれが働くI、Jとの一時を宣言した場合./a.outは、しかし
中止(コアダンプ)
を終了しました。 ifブロックにtempを宣言するとエラーが表示されます。配列サイズを明示的に宣言すると、エラーは表示されません。私は自分のコードをGNUコンパイラでコンパイルしています。
#include<iostream>
using namespace std;
int main()
{
int i, j;
int a[] = {3, 2, 4, 1};
int temp;
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4 - i; j++)
{
if(a[j] > a[j + 1])
{
int temp;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for(i = 0; i < 4; i++)
{
cout << a[i] << endl;
}
return 2;
}
'j 'が3のとき、配列の境界を越えている' a [4] 'である' a [j + 1] 'にアクセスします。 –
'j == 3 'のとき、' a [j + 1] 'を伴うバッファオーバーラン。 – Unimportant
あなたのうちの1人は、この回答をコメントではなく、追加する必要があります。 – TriskalJM