fclose() 질문사항입니다.

nadakwon의 이미지

제가 printf 문을 이용해서 디버그 내용들을 확인하고 있습니다.
프로그램이 멈추는 곳을 알아보기 위해서 printf 문을 사용해서 디버그 메세지를 표시하도록 했는데....

fclose(fp); 이 부분이 실행이 되지 않아서 질문을 올립니다.

우선 파일을 읽고 쓰고 하는 작업이 이루어지는 부분에서 확인을 한결과 fclsoe(fp) 부분후에 프로그램이 멈추는것을 확인했습니다.

int functionA(void)
{
     FILE *fp;
     int buf[10] = {0};

     fp = fopen("test.txt", "rb");
     fread(buf, 1, sizeof(buf), fp);
     fclose(fp);

    buf[2] = 5;

    fp = fopen("test.txt", "wb");
printf("file open\n");
    fwrite(buf, 1, sizeof(buf), fp);
printf("write data\n");
    fclose(fp); // <= 여기에서 멈춤
printf("file close\n");
}

file open 하고 데이터를 읽어서 file close 를 해줍니다.
그 다음에 읽은 데이터에 변경된 값을 넣어서 다시 파일을 open 하게 되고 변경된 데이터를 다시 같은 파일에 써 넣습니다. 그리고 다시 파일을 close 하게 되는 루틴을 작성을 했는데 첫번째 읽기 위한
file open과 file close 는 멈추는 현상이 없습니다.
그런데 마지막에 있는 fclose 함수 밑의 file close 라는 메세지가 나타나야 하는데 나타나지 않게 됩니다.

이 함수를 여러번 호출을 하게 되는데 처음 몇번은 에러 없이 디버그 메세지가 화면에 나타나지만 어느 정도 수행하게 되면 디버그 메세지가 화면에 나타나지 않게 됩니다. 프로그램이 멈추는 현상이 되게 되는데 수행하는 횟수는 대중없습니다.

그런데 errno 를 보기 위해서 추가를 했더니 아직까진 나타나지 않습니다. 무었대문에 이런 현상이 나타나는지 너무 갑갑하네요..

고수님들의 답변부탁드립니다.

언제나 고운 하루 보내세요~~

쌀밥의 이미지

fopen 한후의 fp 값이 NULL 인지 확인하는 구문을 넣으시는 것이 좋을듯 싶습니다.

그리고 보다 정확한 원인을 확인하시려면 gdb 등의 디버깅 툴을 사용하셔야 할듯 합니다.

일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.