본질적으로 콤비네이션 자물쇠의 조합을 파악하려고 시도하는 프로그램을 작성하려고합니다. 나는 사용자로부터 2 개의 입력을 받았다. 다이얼 할 다이얼의 수 (나는 최대 인덱스라고 불렀다)와 각 다이얼이 갈 수있는 가장 높은 수 (나는 최대 수라고 불렀다)를 취한다. 이 두 입력을 받아들이면, 나는 무차별 적으로 자물쇠에 힘을 넣으려고합니다.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가 반환됩니다. 조합을 시도 할 때마다 카운터가 감소합니다.
valgrind에서 오류가 발생하는 위치는 어디입니까? valgrind에서 가장 많은 정보를 얻으려면 최적화없이 디버그 정보를 켜고 컴파일하십시오. GCC는'-g -O0'이 될 것입니다. 또는'gdb'와 같은 디버거에서 프로그램을 실행하십시오. segfault가 발생하면 정확히 어디에서 발생했는지 보여주는 스택 추적을 얻을 수 있어야합니다. –
'testCombo()'가 추측을 계속할 수 있는지 여부를 결정하는 방법은 무엇입니까? 'max_number'를 모르기 때문에 가능한 모든 조합을 시도했는지 평가할 수 없습니다. –