Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在我的程序中找不到分段错误点_C_Segmentation Fault - Fatal编程技术网

C 在我的程序中找不到分段错误点

C 在我的程序中找不到分段错误点,c,segmentation-fault,C,Segmentation Fault,以下是我在以下链接中用gdb编写的程序: #包括 #包括 int main() { char abc[]=“爱”; char*hon[100]; 文件*d,*e; int n; 字符c; d=fopen(“demo.txt”,“r”); /*e=fopen(“demo.txt”,“w”)*/ /*n=FPUT(abc,e)*/ printf(“jhj\n”); 而((n=getc(d))!=EOF) { printf(“kjkkj\n”); 如果(n='a') { /*e=d*/ /*n=pu

以下是我在以下链接中用gdb编写的程序:

#包括
#包括
int main()
{
char abc[]=“爱”;
char*hon[100];
文件*d,*e;
int n;
字符c;
d=fopen(“demo.txt”,“r”);
/*e=fopen(“demo.txt”,“w”)*/
/*n=FPUT(abc,e)*/
printf(“jhj\n”);
而((n=getc(d))!=EOF)
{
printf(“kjkkj\n”);
如果(n='a')
{
/*e=d*/
/*n=putc('k',e)*/
}
}
printf(“%s”,abc);
printf(“abcdefgh%d hjhjh%d”,5,6);
putchar(abc[1]);
}
但我在尝试执行此代码时遇到了分段错误

我回答了以下问题:

分段错误是当我们试图访问一个未分配的内存位置,或者程序没有任何访问权限,或者当一个进程试图访问另一个进程已经访问的内存位置时出现的错误

因此,我认为以读写模式打开同一个文件可能会导致这种情况,尽管我无法解释这种情况是如何发生的

因此,我对试图以“写入”模式访问文件的部分进行了注释。 即使在那之后,我也得到了同样的分割错误

因此,我在代码的不同部分前面放了一些消息。事实证明,我无法在fopen之前收到消息

即使在注释掉以写模式打开文件的部分后,我也无法理解为什么会违反这里的内存访问规则

期待您的见解和帮助


是因为文件不存在的原因吗。但在这种情况下,遇到EOF时,它应该退出while循环,但为什么会出现错误?

您没有检查文件是否成功打开

d = fopen("demo.txt", "r");
如果失败,则
d
将为
NULL
,试图从不存在的文件中读取将导致segfault

n = getc(d) // segfault if d was not actually opened

您甚至还没有检查文件是否已打开。请在您自己的笔记本电脑上安装Linux。然后使用所有警告和调试信息(
gcc-Wall-Wextra-g
with)进行编译。改进代码以避免出现警告。然后@BasileStarynkevitch我无法判断它是否讽刺,但您不需要Linux来运行gdb:/。除了这些细微的标志之外,我还建议使用
-Wall-Wextra-pedantic-Werror
n = getc(d) // segfault if d was not actually opened