FILE 포인터 질문입니다.

nayana의 이미지

파일 포인터를 동적으로 할당하고 해제 하는 부분에서 세그먼테이션이 떨어집니다.
일단. 다음과 같이 동적으로 할당 하였습니다.

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로 닫아주어야 메모리릭이 안날것 같은데...어케 해야할지 모르겠습니다.

sjpark의 이미지

왜 파일 조작하는 스트림 변수를 동적으로 할당하는지..

파일을 수억개를 조작해야 하기 때문에, 한번에 배열로 모두 할당하는게 어려운건지..

코드 좀 복작하게 보이게 해서 다른 사람 볼때 잘 못하면 피 보게 하려고, 일부러 저렇게 "메모리 할당"까지 해가면서 하는 것인지.(혹시 뒤에 이어 받을 사람이 얄미워서 엿먹일려고?)

파일 포인터 쓰는데 메모리 할당을 안하면 안되는 아주 심오한 알고리즘이 있는건가요? 흐흐.. 아직 잘 몰라서...

저 문제에 대한 직접접인 도움이 될만할거라 예상되는 건,

"fopen해서 할당자 받아올때, 제대로 열려서 NULL값이 넘어오진 않았는지 확인은 해 보셨나요?"

그럼.

nayana의 이미지

일단 fopen해서 NULL값에 대한 검사는 했습니다.
일단 동적으로 할당한 이유는 파일을 여는 갯수가 일정치가 않습니다.
파일을 2개를 열수 있고 3개도 열수 있고 1개만 열수도 있습니다.
또한 4, 5 ....개도 열수 있습니다. 위의 예제에서는 3개라고 해놓았지만..
사람마다 파일을여는 개수가 틀리기 때문에
예를 들어서 ./lfw a.txt b.txt c.txt d.txt e.txt 이런식으로 하면
파일을 여는 갯수가 5개 입니다. 배열로 잡으면 일정갯수 밖에 열수가 없기때문에 동적할당을 한것입니다.

m_Fp = new FILE* [ 파일갯수 ]; 입니다.

doldori의 이미지

m_Fp[i]가 fopen()으로 초기화되었나요? 그렇지 않으면 fclose()의 결과는
정의되지 않습니다. 다음 코드로 검사해 보세요.

for (int i = 0; i < 3; ++i)
    m_Fp[i] = fopen(filename[i], "r");
// use m_Fp[i]
for ( int i = 0; i < 3; ++i ) 
    fclose( m_Fp[i] ) ;

아마 argv로 파일 이름을 가져오는 것 같은데 인자가 제대로 fopen()으로
전달되는지도 확인해 보시고요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.