0
オンライン裁判官に次の機能を実装している間、二重のフリーまたは破損(!prev)エラーが発生します。Cのdouble freeまたはcorruption(!prev)エラー
void nextPermutation(int* A, int n1)
{
int i = 0;
int tmp = 0;
int flag = 0;
int ret = 0;
if(n1 == 1)
return A[0];
for(i = n1; i > 0; i--)
{
if(flag == 0)
{
if(A[i] > A[i - 1])
{
tmp = A[i];
A[i] = A[i - 1];
A[i - 1] = tmp;
flag = 1;
ret = i;
break;
}
}
}
for(i = ret; i < n1 - 1; i++)
{
if(A[i] > A[i + 1])
tmp = A[i];
A[i] = A[i + 1];
A[i + 1] = tmp;
}
}
ただし、カスタム入力を使用してコードをテストするとうまくいきます。 誰も私になぜこれが起こるのか教えてもらえますか?
あなたの関数は戻り値の型としてvoidを持ち、最初のif条件でA [0]を返しています。 – denis
2番目の 'for'ループでは、3つの割り当てがすべて' if'の一部であるはずですか?中括弧は使用していないので、最初の行だけが 'if'にあります。 – Barmar
発信元のコードを投稿できますか? – denis