2013-02-21 5 views
-1

나는 C로 코드를 작성해야하는 압축 알고리즘을 연구 중이다. 프로그램은 파일을 가져와 모든 문자에서 가장 중요한 비트를 제거하고 압축 된 텍스트를 다른 파일에 저장한다. 아래에 표시된 것처럼 compress라는 함수를 작성했습니다. out_buf를 해제하는 동안 seg 오류가 발생합니다. 어떤 도움이라도 큰 즐거움이 될 것입니다.압축 알고리즘

답변

2

out_fd를 두 번 닫습니다. 두 번째로 잘못된 파일 설명 자입니다. 그러나 그보다 더 중요한 것은 동적으로 할당 된 버퍼의 버퍼 크기를 찾는 것과 같지 않은 sizeof()의 사용을 검토해야한다는 것입니다. sizeof는 버퍼가 아니라 포인터의 크기를 반환합니다. 호출 코드를 표시하지는 않지만, 전달 된 버퍼에서 strcat()를 사용하는 것은 항상 가치가 있습니다 (결과에 대해 호출자가 충분히 큰 버퍼를 전달 했습니까?). 당신은

close(out_fd); 

    if (close(out_fd) == -1) 
    oops("Error closing output file", ""); 

그냥 처음 close(out_fd)

분할 오류를 제거 두 번 같은 파일 기술자를 종료하고 다시 가야하기에 충분해야한다 어쨌든

, ...

1

out_buf 포인터를 이동했기 때문입니다. malloc'd 영역에 값을 넣으려면 다른 임시 포인터를 사용하여이 메모리 영역을 이동하십시오. 이처럼

: SUBST 모든 *out_buf++*tmp_buf++와 다음

unsigned char *out_buf = malloc(5400000*7/8); 
unsigned char *tmp_buf = out_buf; 

;

쓰기 호출 중에도 out_buf을 변경하십시오. tmp_buf

관련 문제