gpt4 book ai didi

c - 无法在我的程序中找到段错误点

转载 作者:行者123 更新时间:2023-11-30 18:28:05 33 4
gpt4 key购买 nike

以下是我在 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]);





}

但是我在尝试执行此代码时遇到段错误。

我解决了以下问题:

What is a segmentation fault?

段错误是当我们尝试访问未分配的内存位置或程序无权访问或一个进程尝试访问另一进程已访问的内存位置时出现的错误。

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

因此,我评论了尝试以“写入”模式访问文件的部分。即使在那之后我也遇到了相同的段错误错误。

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

即使注释掉以写入模式打开文件的部分,我也无法理解这里如何违反内存访问规则。

期待见解和帮助。

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

最佳答案

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

d = fopen("demo.txt", "r");

如果失败,d 将为 NULL 并且尝试从不存在的文件中读取会导致段错误

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

关于c - 无法在我的程序中找到段错误点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50120834/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com