파이프에서 문자를 읽고 결과 문자열에 넣어 병합을 구현하려고합니다. 세그먼트 화 오류가 계속 발생하며 문제의 원인을 디버깅하는 데 문제가 있습니다. 이 함수에 대한 호출을 제거하면 문제가 사라져 여기에 잘못된 내용이 표시됩니다.C char 배열과 포인터 - merge of mergeort
MAX_LENGTH는 1024로 설정되어 있으며 약 30 자만 정렬하므로 믿을 여유가 있어야합니다.
int merge(char *result, int *leftpipefd, int *rightpipefd) {
char left[MAX_LENGTH/2];
char right[MAX_LENGTH/2];
int leftpos = 0;
int rightpos = 0;
int resultpos = 0;
read(leftpipefd[READ_END], left, MAX_LENGTH/2);
read(rightpipefd[READ_END], right, MAX_LENGTH/2);
int leftlen = strlen(left);
int rightlen = strlen(right);
while (leftpos < leftlen || rightpos < rightlen) {
if (leftpos < leftlen && rightpos < rightlen) {
if (left[leftpos] <= right[rightpos]) {
result[resultpos] = left[leftpos];
resultpos++;
leftpos++;
} else {
result[resultpos] = right[rightpos];
resultpos++;
rightpos++;
}
} else if (leftpos < leftlen) {
result[resultpos] = right[rightpos];
resultpos++;
rightpos++;
} else if (rightpos < rightlen) {
result[resultpos] = left[leftpos];
resultpos++;
leftpos++;
}
}
return EXIT_SUCCESS;
}
사람이 내가 뭘 잘못 볼 수 있을까요?
디버거를 사용해보십시오. strlen()에 대한 호출은 어떤 값을 반환합니까? 당신의'왼쪽 '과'오른쪽' "문자열"은 null로 끝났습니까? – MatthewD
이것을 디버깅하는 가장 좋은 방법은 무엇입니까? 내 표준 입력과 표준 출력은이 과정에서 파이프에 연결되므로 인쇄 방법을 모른다. – Deathcalibur
@Deathcalibur는 "디버거를 사용합니다." 디버거는 단지 print 문을 쓰는 것이 아니라 실제 프로그램입니다.gdb – djechlin