【发布时间】:2016-07-09 05:58:20
【问题描述】:
我在在线法官上执行以下功能时遇到双重释放或损坏 (!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]。
-
在第二个
for循环中,所有三个分配都应该是if的一部分吗?由于您没有使用大括号,因此if中只有第一行。 -
你能把你打电话的代码贴出来吗?
-
你从不使用标志,我的意思是你使用它,但是一旦你设置它,你就会跳出循环。那么flag有什么意义呢?
标签: c