FILE 포인터 질문입니다.
글쓴이: nayana / 작성시간: 월, 2004/11/08 - 9:26오전
파일 포인터를 동적으로 할당하고 해제 하는 부분에서 세그먼테이션이 떨어집니다.
일단. 다음과 같이 동적으로 할당 하였습니다.
FILE** m_Fp;
m_Fp = new FILE* [ 3 ];
그리고 해제 하는 부분에서 다음과 같이 하였습니다.
if ( m_Fp )
{
for ( int i = 0; i < 3; ++i )
fclose( m_Fp[i] )
delete [] m_Fp;
m_Fp = 0;
}
이 부분에서 세그먼테이션이 떨어졌습니다.
fclose( m_Fp[i] )
그래서
if ( m_Fp) delete[] m_FP;
m_Fp = 0;
이렇게 하니까 양호합니다. 파일포인터를 열었으니까. fclose로 닫아주어야 메모리릭이 안날것 같은데...어케 해야할지 모르겠습니다.
Forums:
음
왜 파일 조작하는 스트림 변수를 동적으로 할당하는지..
파일을 수억개를 조작해야 하기 때문에, 한번에 배열로 모두 할당하는게 어려운건지..
코드 좀 복작하게 보이게 해서 다른 사람 볼때 잘 못하면 피 보게 하려고, 일부러 저렇게 "메모리 할당"까지 해가면서 하는 것인지.(혹시 뒤에 이어 받을 사람이 얄미워서 엿먹일려고?)
파일 포인터 쓰는데 메모리 할당을 안하면 안되는 아주 심오한 알고리즘이 있는건가요? 흐흐.. 아직 잘 몰라서...
저 문제에 대한 직접접인 도움이 될만할거라 예상되는 건,
"fopen해서 할당자 받아올때, 제대로 열려서 NULL값이 넘어오진 않았는지 확인은 해 보셨나요?"
그럼.
https://nicesj.com
https://blog.nicesj.com
일단 fopen해서 NULL값에 대한 검사는 했습니다.일단 동적으로
일단 fopen해서 NULL값에 대한 검사는 했습니다.
일단 동적으로 할당한 이유는 파일을 여는 갯수가 일정치가 않습니다.
파일을 2개를 열수 있고 3개도 열수 있고 1개만 열수도 있습니다.
또한 4, 5 ....개도 열수 있습니다. 위의 예제에서는 3개라고 해놓았지만..
사람마다 파일을여는 개수가 틀리기 때문에
예를 들어서 ./lfw a.txt b.txt c.txt d.txt e.txt 이런식으로 하면
파일을 여는 갯수가 5개 입니다. 배열로 잡으면 일정갯수 밖에 열수가 없기때문에 동적할당을 한것입니다.
m_Fp = new FILE* [ 파일갯수 ]; 입니다.
m_Fp[i]가 fopen()으로 초기화되었나요? 그렇지 않으면 fclo
m_Fp[i]가 fopen()으로 초기화되었나요? 그렇지 않으면 fclose()의 결과는
정의되지 않습니다. 다음 코드로 검사해 보세요.
아마 argv로 파일 이름을 가져오는 것 같은데 인자가 제대로 fopen()으로
전달되는지도 확인해 보시고요.
댓글 달기