以下是我在gdb中通过以下链接编写的程序:
https://www.onlinegdb.com/online_c_compiler
#include <stdio.h>
#include <string.h>
int main()
{
char abc[] = "love";
char *hon[100];
FILE *d, *e;
int n;
char c;
d = fopen("demo.txt", "r");
/*e = fopen("demo.txt", "w");*/
/*n = fputs(abc,e);*/
printf( "jhjhj \n");
while ((n = getc(d)) != EOF)
{
printf( "kjkjkkj \n");
if (n == 'a')
{
/*e = d;*/
/*n = putc('k',e);*/
}
}
printf("%s", abc);
printf("abcdefgh %d hjhjh %d", 5, 6);
putchar(abc[1]);
}
但是我在尝试执行此代码时遇到了分段错误。
我经历了以下问题:
当我们尝试访问未分配的内存位置或程序没有任何访问权限或者当一个进程尝试访问另一个进程已经访问的内存位置时,分段错误是一个错误
所以,我认为在读写模式下打开同一个文件可能会导致这种情况,但我无法解释这可能是怎么回事。
因此我评论试图访问文件的部分&#34;写&#34;模式。 即使在那之后我也得到了相同的分段错误。
所以,我在代码的不同部分之前放了一些消息。事实证明,我不能在fopen之前收到消息。
即使在写入模式下打开文件的部分注释掉后,我也无法理解如何违反内存规则的访问权限。
期待见解和帮助。
是否因为文件不存在的原因。但是在那种情况下,在遇到EOF时它应该退出while循环,但为什么会出错?
答案 0 :(得分:4)
您没有检查您的文件是否已成功打开
d = fopen("demo.txt", "r");
如果失败,d
将为NULL
,并且尝试从不存在的文件中读取会导致段错误
n = getc(d) // segfault if d was not actually opened