2016-02-09 102 views
0

這裏是我的代碼 文件的名稱filewrite.cFREAD錯誤 - 分段故障

#include<stdio.h> 
#include <stdlib.h> 
void main() 
{ 

    int *p; 
    *p = 5; 
    FILE *fp1 = fopen("sample.txt","w"); 
    fwrite(&p,sizeof(int),1,fp1); 
    fclose(fp1); 

    printf("\n Value of p written into the file is :%d \n",*p); 

int *q; 
FILE *fp2 = fopen("sample.txt","r"); 
fread(&q,sizeof(int),1,fp2); 
fclose(fp2); 

printf("\n Value of q read from the file is :%d \n",*q); 

} 

輸出所看到的終端在Linux上:

$>gcc -o filewrite.o filewrite.c 

$>filewrite.o 

$>Segmentation fault (core dumped) 

我能看到文件sample.txt寫出來。但無法理解爲什麼有一個核心轉儲。

+2

'p'和'q'不應該是指針。將它改爲'int p = 5;'和'int q;'。 –

回答

0

您需要更改

fread(&q,sizeof(int),1,fp2); 

fread(q,sizeof(int),1,fp2); 

的第一個參數fread是一個void *和你傳遞一個pointer to pointer to int


而且,對於分配內存指針p

int *p; 
p = malloc(sizeof(int)); 

同樣適用於q

int *q; 
q = malloc(sizeof(int)); 
+0

還有一個主要問題.... –

+0

我試過做你的改變。仍然我得到分段錯誤 – Sridhar

+0

@SouravGhosh,Thanx。編輯。 – Haris

0

在你的代碼

int *p; 
*p = 5; 

調用undefined behavior當你試圖寫入未初始化的內存。沒有明確的分配,p指向一些內存地址,這是最有可能不能從您的程序訪問。

您需要先分配內存至p,然後才能對其進行解除處理。

也就是說,您使用fwrite()fread()是有問題的。您正在將指針指向int,而您需要將指針傳遞給void

如果您將pq的類型從int *更改爲int,我相信這會解決您的問題。

這就是說,

  • void main()int main(void),至少,以符合標準。
  • 在使用返回的文件指針之前,請始終檢查返回值fopen()是否爲NULL以獲得成功。
+0

嗨,非常感謝您的幫助,但我仍然面臨問題,請檢查我的代碼一次。 。 void main() { int * p; p =(int *)malloc(sizeof(int)); * p = 5; FILE * fp1 = fopen(「sridhar.txt」,「w」); fwrite(&p,sizeof(int),1,fp1); fclose(fp1); (「\ n寫入文件的p值爲:%d \ n」,* p); int * q; FILE * fp2 = fopen(「sridhar.txt」,「r」); q =(int *)malloc(sizeof(int)); (q,sizeof(int),1,fp2); fclose(fp2); (「\ n從文件讀取的q的值是:%d \ n」,* q);寫入文件P的 } 值是:Q 5 值從文件中讀取是:34000912 – Sridhar

+0

@Sridhar請不要急於....查看最新編輯我的答案。 –

+0

void main() { int * p; p =(int *)malloc(sizeof(int)); * p = 5; FILE * fp1 = fopen(「sridhar.txt」,「w」); fwrite(&p,sizeof(int),1,fp1); fclose(fp1); (「\ n寫入文件的p值爲:%d \ n」,* p); int * q; FILE * fp2 = fopen(「sridhar.txt」,「r」); q =(int *)malloc(sizeof(int)); (q,sizeof(int),1,fp2); fclose(fp2); (「\ n從文件讀取的q的值是:%d \ n」,* q); } – Sridhar

0

正如你們建議的那樣,我修改了我的代碼,我能夠得到正確的輸出。 。非常感謝您的時間夥伴..守則

#include<stdio.h> 
#include <stdlib.h> 
int main() 
{ 

int *p; 
p = malloc(sizeof(int)); 
*p = 5; 
FILE *fp1 = fopen("sridhar.txt","w"); 
fwrite(p,sizeof(int),1,fp1); 
fclose(fp1); 

printf("\n Value of p written into the file is :%d \n",*p); 

int *q; 
FILE *fp2 = fopen("sridhar.txt","r"); 
q = malloc(sizeof(int)); 
fread(q,sizeof(int),1,fp2); 
fclose(fp2); 

printf("\n Value of q read from the file is :%d \n",*q); 

return 0; 
} 

輸出爲如下:

P的值寫入該文件是:5 Q值從文件中讀取的是:5個再次

感謝您的幫助@ Saurav和Haris

+0

而不是使用'malloc()',簡單地不使用'int p'的原因是什麼? –