안녕하세요.
현재 학교 수업으로 컴파일러를 배우고 있는 대학생입니다.
제가 여쩌보고픈 문제는 바로 파일 입출력을 위한 FILE*와 구조체 동적할당간의 메모리 침범에 대해서 입니다.
수업 과제로 Flex&Bison을 이용해 MiniC Compiler를 구현하게 되었는데요.
과제를 하는 내내 문제가 생겼던 부분이 하나 있습니다.
바로 포인터를 이용한 동적할당 시 생길 수 있는 메모리 침범 문제 때문입니다.
저는 AST를 AST.h의 PROGRAM이라는 구조체에 동적할당을 통해 트리 구조로 저장시켰습니다.
그런데 문제는 파일 포인터를 이용해 파일로 출력시켜야 하는데 파일포인터를 사용하면, 정확히 말하면 파일 포인터에 fopen 함수를 이용해 파일 정보를 저장시키면 PROGRAM안에 저장되어있는 하위 노드의 주소값이 변경되는 겁니다.
아래 이미지파일 두 개는 파일 포인터를 쓴 것과 안 쓴 것의 결과를 올린 것입니다.