关于文件操作的问题
最近学到文件操作方面的内容以下代码是对 一个整形变量和整形指针变量的存储与读取,这段代码是先跑上面一段进行数据的存储,然后跑下面那一段进行数据的读取。可是数据读取部分程序报错了
报错提示:test_file.exe 中的 0x78bccac8 (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 写入位置 0x004ffee8 时发生访问冲突
#include<stdio.h>
#include<stdlib.h>
///*
int main()
{
int *p,**h,i;
FILE *f;
p=&i;
i=1;
f = fopen("a","wb");
fwrite(&p,sizeof(int*),1,f);
fwrite(p,sizeof(int),1,f);
fclose(f);
printf("%d",*p);
return 0;
}
//*/
/*
int main()
{
int *p,**h,i;
FILE *f;
f = fopen("a","rb");
fread(&p,sizeof(int*),1,f);
fread(p,sizeof(int),1,f);
fclose(f);
printf("%d",*p);
return 0;
}
//*/
1.将
f = fopen("a","rb")
中a后面加上文件后缀
例如:
f = fopen("a.txt","rb")
2.把打开的对应文件关了 啥意思 你两个main? 万千只cnm 发表于 2021-7-12 13:14
啥意思 你两个main?
差不多 不过是先执行上面那一段main然后把上面注释掉 换执行下面那一段main xiaosi4081 发表于 2021-7-12 13:11
1.将
貌似还是有这个错误,不过这个错误貌似是用到了一些没有初始化的地址所导致的。我写这段程序是为了模拟把链表存储到文件里的操作,因为一般链表里会有一个指针指向下一个节点,而如果单纯的把头节点a存进文件里,文件里的a节点里面就只有原本指向下一个节点的地址,而那个地址里面具体的值并没有存进文件里,这样就不算把链表存储到文件里面了 每一次运行程序,变量的地址都是不一样的
你不能把变量的地址保存到文件,然后再一次运行去读取文件中保存的这个地址,因为这一次那个地址绝大多数情况存放的内容,不是上一次运行时候的内容
梦竹风 发表于 2021-7-12 15:05
貌似还是有这个错误,不过这个错误貌似是用到了一些没有初始化的地址所导致的。我写这段程序是为了模拟把 ...
你不能把内存中的地址写到文件中保存,因为下一次运行程序,这个文件中保存的地址就不能用了
人造人 发表于 2021-7-12 15:28
每一次运行程序,变量的地址都是不一样的
你不能把变量的地址保存到文件,然后再一次运行去读取文件中保存 ...
对,后来我也注意到这个问题,所以才有 这一段代码:fread(p,sizeof(int),1,f);这一段是按着上次的地址写入数据,不过又发现上一次的地址在这次程序运行中未被初始化,也有可能存储着什么重要的信息,所以改成用malloc创建一个地址了 你两个main当然错了啊。相当于运行了两个程序。
变量都释放了 万千只cnm 发表于 2021-7-12 19:40
你两个main当然错了啊。相当于运行了两个程序。
变量都释放了
变量是释放了 可是我存储到文件里了啊 fread(&p,sizeof(int*),1,f);
fread(p,sizeof(int),1,f);
你读取的都是上一个程序的值啊(变量的地址)
两个程序,这些值和变量之间根本没关系
而且p是 int*不是int
万千只cnm 发表于 2021-7-12 21:46
对啊 所以我实在尝试复刻上一个程序的值啊让p值针同样指向上次程序指针指向的地址,然后在往这个地址写上上次程序这个地址的值啊所以 fread(p,sizeof(int),1,f); 应该是没错的啊 梦竹风 发表于 2021-7-13 08:46
对啊 所以我实在尝试复刻上一个程序的值啊让p值针同样指向上次程序指针指向的地址,然后在往这个地址写 ...
你p和&p都是地址啊 万千只cnm 发表于 2021-7-13 09:23
你p和&p都是地址啊
对啊fread 里面的第一个参数就是要去地址啊
页:
[1]