打印文件内容的程序无法运行,返回“<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 &gt;= 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> 处的内存”错误的主要内容,如果未能解决你的问题,请参考以下文章

返回一个指向 char 数组的指针。如何打印出数组的全部内容?

Python音频功能无法按预期工作

c - 无法理解 pthread_join()

同时打印到屏幕和写入文件

webservice接口读取xml文件内容

我怎样才能让这个程序也打印列表中的第一个条目?