gpt4 book ai didi

c - C 中的重复排列; Valgrind 错误

转载 作者:行者123 更新时间:2023-11-30 15:24:47 26 4
gpt4 key购买 nike

我正在尝试编写一个程序,本质上我是在尝试找出密码锁的组合。我从用户那里获取两个输入,要转动的转盘数量(我称之为最大索引)和每个转盘可以转到的最高数字(我称之为最大数量)。有了这两个输入,我只是想用暴力破解锁。

为了解决这个问题,我尝试采用函数 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。每次尝试组合时,计数器都会递减。

最佳答案

我没有发现您的代码有任何本质上的错误。它对我有用,带有我根据您的规范设计的 testCombo() 函数。

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

换句话说,我将责任归咎于 testCombo(),但我无法更具体,因为您还没有提供它。

关于c - C 中的重复排列; Valgrind 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28241846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com