我在在线裁判上执行以下功能时遇到双重免费或损坏(!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;
}
}
但是,当我使用自定义输入测试代码时,它工作正常。 谁能告诉我为什么会这样呢?
答案 0 :(得分:4)
此代码中int * A的大小是多少。我想在第一个for循环中你需要用(n1-1)初始化我。
for(i=(n1-1);i>0;i--)
i> 0的条件似乎没问题,因为A [i-1]正在循环中进行评估。
我认为你需要使用malloc为int *分配内存。另外,正如我在评论中所述,你不能返回A [0];