这是我的代码 文件名 filewrite.c
#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
。但无法理解为什么会有核心转储。
答案 0 :(得分: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));
{p>同样适用于q
int *q;
q = malloc(sizeof(int));
答案 1 :(得分:0)
在您的代码中
int *p;
*p = 5;
当您尝试写入单位化内存时,调用undefined behavior。如果没有明确的分配,p
指向某些内存地址,这很可能无法从您的程序中访问。
您需要先将内存分配给p
,然后再将其取消。
也就是说,您对fwrite()
和fread()
的使用存在问题。您正在将指针指针传递给int
,而您需要将指针传递给void
。
如果您将p
和q
的类型从int *
更改为int
,我相信这样可以解决您的问题。
那就是说,
void main()
至少应该int main(void)
符合标准。fopen()
的返回值是否为NULL,以确保成功。答案 2 :(得分: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