C中双重免费或损坏(!prev)错误

时间:2016-07-09 05:58:20

标签: c

我在在线裁判上执行以下功能时遇到双重免费或损坏(!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;
    }
}

但是,当我使用自定义输入测试代码时,它工作正常。 谁能告诉我为什么会这样呢?

1 个答案:

答案 0 :(得分:4)

此代码中int * A的大小是多少。我想在第一个for循环中你需要用(n1-1)初始化我。

for(i=(n1-1);i>0;i--)

i> 0的条件似乎没问题,因为A [i-1]正在循环中进行评估。

我认为你需要使用malloc为int *分配内存。另外,正如我在评论中所述,你不能返回A [0];