C中重复的排列; Valgrind错误

时间:2015-01-30 17:55:26

标签: c valgrind

我正在尝试编写一个程序,其中我试图弄清楚组合锁的组合。我接收了来自用户的两个输入,要转动的拨号数量(我称之为最大指数)和每个拨号可以进入的最高数量(我称之为最大数量)。拿这两个输入,我只是试图强行进入锁定。

因此,为了解决这个问题,我尝试采用openHelper函数所看到的递归方法。每次创建完整组合时,都会通过单独的函数testCombo进行测试,并输出三个值中的一个。如果组合起作用,它输出1,如果组合失败则输出-2,你不能再尝试,如果组合失败,则输出-1,但你可以继续猜测。

但是,当使用valgrind对此进行测试时,我会重复出现此错误:进程以信号11(SIGSEGV)的默认操作终止。

创建数组有什么问题吗?或者我设计程序的方式有问题吗?

#include <stdio.h>
#include <stdlib.h>

int openHelper(int *input, int *output, int current_index, int max_index,
        int max_number);

int open(max_value, max_indices)
{
    int numbers[max_value];
    int test[max_indices];

    int i; 
    int x;
    /* Create array of all possible numbers */
    for(i = 0; i < max_value; i++){
        numbers[i] = i;
    }
    x = openHelper(numbers, test, 0, (max_indices - 1), max_value);
    return x;
}

int openHelper(int *input, int *output, int current_index, int max_index,
        int max_number)
{
    int i;
    int x;
    for(i = 0; i < max_number; i++){
        output[current_index] = input[i];

        if(current_index == max_index){
            x = testCombo(output);
            if(x != -1){
                return x;
            }
        }
        else{
            openHelper(input, output, (current_index + 1), max_index,
                    max_number);
        }
    }
}

通过在程序中设置计数器来测试组合。因此,如果计数器在10次尝试后设置为10,则返回-2。每次尝试组合时,计数器都会递减。

1 个答案:

答案 0 :(得分:1)

我的代码没有任何内在错误。它适用于我,我根据您的规范设计了testCombo()功能。

但是,正如我在评论中所说,testCombo()似乎没有提供足够的信息来正确地完成其工作。此外,如果您正在测试的组合的大小(即max_indices)小于testCombo()期望的大小,那么它很可能会读取结束,这可能会触发段错误。

换句话说,我在责备testCombo(),但我不能再具体了,因为你没有提出它。