2014-07-08 3 views
-2
void frameInfoData(int i,int j,int k) 
{ 
    FILE *frameData; 
    frameData=fopen("frame_Data.txt","a"); 
    fprintf(frameData,"Packet number is %d  Packet L %d   Packet Header L %d  ",i,j,k); 
    fprintf(frameData,"\n"); 

} 

위 코드는 파일을 작성하는 코드입니다. 내 데이터는 약 3170 줄입니다. 이 프로그램을 실행하면 세그먼트 오류가 발생하고 코어가 덤프됩니다. 그러나 필자가 쓰기를 제어하고 3169 줄까지 쓰기도 매우 쉽고 정확하게 작성할 것입니다.파일에 쓸 때 C에 세분화 오류가 발생했습니다.

저는 C 프로그래밍에 익숙하지 않습니다.이 문맥에서 저를 도우십시오. 사전에

덕분에

+4

'fopen()'의 결과를 확인하십시오. 파일이 성공적으로 열리면'fclose()'를 기억하십시오. – hmjd

+0

어떤 기계가 있습니까? – vaibhav

+0

나는 윈도우 7에서 컴파일하고 cygwin을 사용하여 컴파일 중입니다 – user3816057

답변

2

는 추가는 :

#include <errno.h> 
#include <stdio.h> 

//other code here 

if (frameData == NULL) { 
    perror("fopen()"); 
    return; 
} 

이 디버깅을 시작할 수 있어야 ...

(즉 또한 오류의 원인이 될 수 반환하기 전에 fclose(frameData)하는 것을 잊지 마세요 파일이 이미 열려있는 경우) 함수가 호출됩니다.

-1

대부분 fopen()의 NOT 실패 가능성이 있지만, 당신이 그것을 확인하고는 다음과 같은 작동하지 않는 경우 프로그램을 종료해야합니다 (작동하지 않을 때는 NULL 포인터를 반환) :

FILE* fp = fopen("SOMEFILE.txt", "a"); 
if(!fp) //in other words - NOT fp - means FP == NULL 
{ 
    printf("Error: Could not open the file specified.\n"); 
    exit(1); 
} 

논리적 이유는 당신이 될 것이다 fclose()을 사용하지 않습니다. fopen() 항상 변경됩니다 (다른 경로에 대해 다른 포인터를 반환 함). 따라서 정적 메모리보다 훨씬 느린 것을 배운 경우 malloc()과 같은 동적 메모리를 사용합니다. 동적 메모리는 이 여전히 프로그램에서 '사용'될 것입니다 (함수 나 다른 곳이라면 상관 없습니다). malloc()을 사용하면 간단히 free() 함수를 사용하여 메모리를 확보 할 수 있습니다. fopen() 사용 -에 '자유'그 동적 메모리가 포인터에 fclose()을 사용하는 방법 -이 방법 :

fclose(FILE_POINTER_NAME); 

FILE_POINTER_NAME은 ... 음 ... 음, 파일 포인터의 이름입니다.

희망이 있습니다.

관련 문제