여기 내 문제가 있습니다. 다음 컴파일 가능한 코드는 단순히 디버깅과 달리 실행될 때 다른 결과를 생성합니다. Cygwin 도구가있는 Windows 10에서 NetBeans IDE 8.0.2를 gdb 디버거와 함께 사용합니다.c - 알파벳순 알파벳순 : 실행시와 디버깅시의 출력이 다릅니 까?
[JACUZZI]
[A] : 1
[C] : 2
[I] : 3
[J] : 4
[U] : 5
[Z] : 6
[Z] : 7
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
int exists(int* arr, int len, int i) {
for (int j = 0; j < len; j++) {
if (arr[j] == i) {
return 1;
}
}
return 0;
}
int* alpha_order(char* source, int len) {
int* pos = malloc(sizeof(int) * len);
char c = SCHAR_MAX;
int cpos = 0;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
if ((c > *source) && (exists(pos, len, j) != 1)) {
c = *source;
cpos = j;
}
source++;
}
source -= len;
c = SCHAR_MAX;
pos[i] = cpos;
}
return pos;
}
int main(void) {
char* str = "JACUZZI";
int len = strlen(str);
int* pos = alpha_order(str, len);
printf("[%s]\n", str);
for (int i = 0; i < len; i++) {
printf("[%c] : %d\n", str[pos[i]], (i + 1));
}
return 0;
}
내가 여기 기대하고있어 나는 성공적으로 내가 (라인 pos[i] = cpos;
에 중단 점 등으로) 프로젝트를 디버깅 할 때마다 얻을 수있어 다음과 같은 결과이며,
[JACUZZI]
[A] : 1
[C] : 2
[I] : 3
[U] : 4
[Z] : 5
[Z] : 6
[Z] : 7
내가 내 코드에서 메모리 관리에 문제가 의심 그러나, 난 그냥 프로젝트를 실행할 때, 이것은 내가 얻을 잘못된 출력됩니다. 이것은 C를 처음 시도한 것으로, Java (가비지 콜렉션 포함)에 익숙합니다. 따라서 문제가 무엇인지 알기가 매우 힘듭니다. 특히 프로젝트를 디버깅 할 때 모든 단계에서 원하는 결과를 얻는 것이 중요합니다.
내가 작성한 알고리즘은 문자열 (char*
배열)을 반복하여 최소값을 찾고 int*
배열에 저장합니다. int*
어레이는 이미 고려한 위치를 확인하는데도 사용됩니다. 이것은 문자열의 모든 문자에 대한 위치가 int*
배열에 저장 될 때까지 반복됩니다.
최종 출력은 주어진 문자열의 문자 사전 순입니다. 저는 시간 복잡성이 O (n^3)라고 생각합니다. 동일한 결과를 얻는 더 효율적인 방법이있을 수 있다는 것을 알고 있습니다.하지만 나는 일반적으로 C에 익숙해 져 있습니다. 걸음마.
이 문제를 해결하려면 C에서 다차원 배열 (및 포인터)에 접근 할 때 유용합니다. 코딩을 통해 학습하는 것을 선호하지만 필자도 책을 가지고 있습니다. 예 : 이 알고리즘은 원주 형 전치 인코더/디코더의 구현에 적용될 수있다. 따라서 코드에서 잘못된 코딩 방법을 지적 할 수 있다면 알려주십시오. 즉, 디버거를 벗어나는 문제를 찾는 데 도움이되는 답변을 중요하게 생각하며 다음에 무엇을 시도해야할지 모르겠습니다.
감사합니다.
왜'char c = CHAR_MAX;'대신'char c = SCHAR_MAX; – chux
'exists (pos, len, j)'는'len'의 길이에 대해'pos []'를 검색하지만 아직 모든 요소가 할당되지는 않습니다. – chux
그게 다야! 두 개의 for-loop 내에서 반복을 추적하기 위해 또 다른 변수'int k = 0; '을 만들었고, 위치가'pos *'에 저장 될 때마다 증가합니다. 프로그램이 의도대로 작동하지만 디버거에서이 문제점을 찾을 수없는 이유가 있습니까? –