打印文件内容的程序无法运行,返回“<address> 处的指令引用 <address> 处的内存”错误
Posted
技术标签:
【中文标题】打印文件内容的程序无法运行,返回“<address> 处的指令引用 <address> 处的内存”错误【英文标题】:Program to print file contents unable to run, returns "Instruction at <address> referenced memory at <address>" error 【发布时间】:2021-12-29 08:39:43 【问题描述】:我正在从一本书中学习 C 语言。 我已经读到了书中关于文件和命令行参数的部分,但现在我被这段代码卡住了:
#include <stdio.h>
int main (int argc,char **argv)
FILE *f=fopen(argv[1],"r");
int c;
do
c=fgetc(f);
printf("%c",c);
while(!feof(f));
当我运行它时(参数是代码自己的用于测试的文件名),出现error message:
0x0000000000401474 处的指令引用了 0x0000000000000006 处的内存。无法读取内存。单击确定以终止程序。点击CANCEL调试程序。
这个错误是什么意思,如何解决?
【问题讨论】:
在调用fopen
后始终检查f
。在访问 argv[1]
之前,请务必检查 argc >= 2
。请注意,“参数是代码自己的文件名” 无论如何都是argv[0]
。
如果文件是二进制文件(不是文本文件),那么printf("%d ",c);
会更有用。
我为误解道歉,@WeatherVane,我所说的“代码自己的文件名”是指未编译的 C 代码保存在一个名为“tutorial.c”的文件中,我编译了代码并使用fileopen tutorial.c
运行可执行文件
无法重现,但我作为参数提供的文件确实存在于默认文件夹中。检查argc
和检查f
。
非常感谢您的 cmets @Weather Vane,我的代码现在可以工作了。
【参考方案1】:
你需要检查文件指针是否不为 NULL 之类的
if (f == NULL)
return EXIT_FAILURE;
此外,文件使用完毕后需要关闭。
fclose(f);
【讨论】:
非常感谢您的建议@Ada Lovelace,我已经实现了这两个并且代码现在可以工作了。以上是关于打印文件内容的程序无法运行,返回“<address> 处的指令引用 <address> 处的内存”错误的主要内容,如果未能解决你的问题,请参考以下文章