gpt4 book ai didi

c - 给出段错误和 idk 在哪里

转载 作者:行者123 更新时间:2023-11-30 20:50:09 25 4
gpt4 key购买 nike

我正在用 C 编写一个程序,用户输入一些内容,如果其中一个单词在数组中(在本例中是 biblio),但是当我要测试它时给我段错误(核心转储)。我知道当程序尝试访问它无法访问的内存字段时会出现此错误,但我找不到它在哪里执行此操作以及如何修复它。有人可以帮助我吗?

 #include <stdio.h>
#include <string.h>

int within(char* str, char * biblio[], int size)
{
char * aux;
for(int i = 0; i < size; i++)
{
aux = biblio[i];
if(strcmp(str, aux) == 0 )
return 1; //return 1 --> the word exists in biblio array
}
return 0;
}

int main()
{
int iterations = 5;
int size = 50, count = 0;
char * biblio[] = {"mostarda", "ketchup", "maionese"};
char * input[size];
char * str = NULL;
int ret;
while(iterations > 0)
{
do{
printf("Enter a value: ");
scanf("%s", str);
ret = within(str, biblio, sizeof (biblio));
if(ret == 1)
{
memset(input, 0, sizeof(input)); //clear biblio
break;
}
input[count] = str;
count++;
}while( (strcmp(str, "EOF")) == 0);

printf("%s", input);
iterations--;
}
return 0;
}

非常感谢!!!

最佳答案

通常,使用 gcc -g 进行编译以进行调试,然后在 gdb 下运行二进制文件。当它核心转储时,给 gdb 提供 where 命令来查看完整的调用堆栈,显示程序中失败的行号。

例如,这是我的 gdb session 找出原因的过程。我使用 gdb ./a.out 在 gdb 中运行程序,然后输入测试值。当它崩溃时,它显示错误出现在 strcmp 的(程序集)实现中(我没有该库源文件,因此“没有这样的文件或目录”。我去 up 1 将 View 在堆栈中向上移动一级(进入您的 within 函数),然后我将两个参数的值打印到 strcmp。一其中显然不符合应有的样子。

Reading symbols from ./a.out...done.
(gdb) run
Starting program: /tmp/p/a.out
Enter a value: 10

Program received signal SIGSEGV, Segmentation fault.
__strcmp_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:31
31 ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S: No such file or directory.
(gdb) up 1
#1 0x00005555555547f4 in within (str=0x0, biblio=0x7fffffffe450, size=24) at foo.c:11
11 if(strcmp(str, aux) == 0 )
(gdb) print (str)
$1 = 0x0
(gdb) print (aux)
$2 = 0x555555554a44 "mostarda"

关于c - 给出段错误和 idk 在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50571180/

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