메모리 할당 관련해서 오류가 나는데, 어떻게 해결해야 되는지 모르겠습니다.
일단 getData 함수에 main에 있는 buffer의 주소를 줄 수 있는 부분이 없어, 내부에서 따로 malloc을 해야되는 것으로 보입니다.
char *getData(int offset, int size, int *count, FILE *fp)
그런데 그렇게 선언을 해서 return값으로 buffer의 값을 주고 나면, getData 함수 안에 선언한 malloc은 어떻게 free를 해야 되는지 여쭤보고 싶습니다.
main에 있는 free(buffer)는 함수 내부의 malloc을 해제하지 못하는 것으로 보입니다.
지난번에도 문의드렸었는데, 정확한 답변을 받지 못해 이번에는 코드 없이 질문만 드립니다.
항상 도움에 감사드립니다.
메모리 할당과 관련해서 가장 자주 범하는 오류는
확장자를 .cpp로 사용하는 것입니다.
확장자를 .c로 사용하세요.
확장자가 .cpp이면 C++ 문법으로 컴파일하기 때문에 C++ 문법 기준으로 메모리 할당 오류가 발생합니다.
getData 함수에서 메모리를 할당하고 할당한 메모리를 반환하는 것이 어렵다면 함수를 단순화해서 다음과 같이 간단한 코드를 작성해서 정상 동작하는 것을 확인하고 코드를 확장하는 것입니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *getData(int size)
{
char *buffer = malloc(size + 1);
memset(buffer, 0, size + 1);
return buffer;
}
int main()
{
char *data = NULL;
data = getData(20);
strcpy(data, "Hello World");
printf("%s\n", data);
free(data);
return 0;
}
심사문제에서 getData에서 fp 파일 포인터를 받은 것은 파일의 내용을 읽기 위한 것이었으니까 파일 포인터 인자를 추가하고, 파일 포인터를 전달하고, 파일 내용을 읽어서 getData 안에서 출력해보는 것도 방법입니다.
하나씩 단계별로 동작을 확인하면서 해결해가세요.
처음부터 복잡한 코드를 처리할 수 있는 숙련도가 없을 때는 간단한 코드부터 복잡도를 하나씩 올려가는 게 좋습니다.