C Hangman 程序调试辅助(中止陷阱:6 错误)[关闭]

Posted

技术标签:

【中文标题】C Hangman 程序调试辅助(中止陷阱:6 错误)[关闭]【英文标题】:C Hangman program Debug Assist (Abort trap:6 error) [closed] 【发布时间】:2018-12-09 03:20:32 【问题描述】:

我正在用 C 语言创建典型的刽子手程序,代码可以完美地编译和运行,直到我添加 3 行代码 (25-29),在用户选择了他们想要的游戏模式后将字符串加载到结构中。

运行程序时,除非用户选择执行第 25-29 行中的“if”语句(有一个注释标识此语句),否则一切正常,然后终端返回“Abort trap: 6”错误.

经过研究并尝试调试我的代码后,我无法找到写入尚未初始化的内存的位置。代码中的其他所有内容都可以正常工作,因此我只是在寻找有关此错误的具体建议:

char temp2[20]="", phrase[15]="cest la vie";
int guess=0, correct=0, banksize=0, wordsize=0, wordNum=0;
int n, select=0;
time_t t;
strcpy(hangman.guess,temp2);
hangman.incorrect=0;
hangman.wordcount=0;

//This section introduces the user to the game
printf("\nWelcome to Dakota's Amazing Hangman Program!!!(TM)\n");
printf("---------------------------------------------------\n");
printf("I will select a word or phrase at random. \n");
printf("Guess a letter wrong 10 times and you'll hang.\n");
printf("For a word, type and enter 0. For an expression, enter 1:");
scanf("%i",&select);

//This section requests a file and loads it into struct
if(select==0)

   InputFile();
   banksize=LoadWordbank();
   srand((unsigned)time(&t));
   wordNum=rand() % banksize;

if(select==1)  //The issue is with the addition of this if statement

   strcpy(hangman.word[0],phrase);
   wordNum=0;
 

wordsize=strlen(hangman.word[wordNum]);
char temp3[wordsize];
for(n=0;n<wordsize;n++)
   temp3[n]='_';
strcpy(hangman.progress,temp3);

这是我的结构定义供参考,它是一个全局变量:

struct game

  char word[30][15];
  char progress[8];
  char guess[20];
  int incorrect;
  int wordcount;
;
struct game hangman;

另外,我是这个论坛的新手,所以欢迎任何关于问题格式的有效建议。

【问题讨论】:

请向我们展示该结构的确切声明。 我在发布后不久意识到我忽略了包含它。它已被包括在内。 欢迎来到 Stack Overflow。您的问题中只有 35 行代码,因此很难理解哪些是第 60-63 行。请使用标签下方的edit 按钮编辑您的问题,并指出您正在谈论的行。谢谢。 整个代码200行,我已经包含了相关行。意识到查看数字无济于事,我已经在代码中注释了有问题的“if”语句的位置并更改了行号。 删除不相关的代码是件好事,但要确保剩下的是minimal reproducible example 【参考方案1】:

在与一些同学一起工作并确定该问题与字符串如何加载到结构中无关后,我们确定这一定是一个对单词长度敏感的变量的问题。

经过仔细检查,看起来我已经扩展了所有变量的大小,以说明在结构中添加了一个大于 7 个字母的单词,除了这个变量:

char progress[8];

这导致代码的第 33 行出现问题,我尝试将较大的字符串复制到 hangman.progress 变量中。

将其扩展到 [15] 的安全分配后,我不再收到任何错误。代码现在如下所示:

struct game

  char word[30][15];
  char progress[15];
  char guess[20];
  char bodypart[10][15];
  int incorrect;
  int wordcount;
;
struct game hangman="cest la vie";

...

//This section loads the arrays in the hangman struct
char temp2[20]="", phrase[]="cest la vie";
int guess=0, correct=0, banksize=0, wordsize=11, wordNum=0;
int n, select=0;
time_t t;
strcpy(hangman.guess,temp2);
hangman.incorrect=0;
hangman.wordcount=0;
LoadBody();

//This section introduces the user to the game
printf("\nWelcome to Dakota's Amazing Hangman Program!!!(TM)\n");
printf("---------------------------------------------------\n");
printf("I will select a word or phrase at random. \n");
printf("Guess a letter wrong 10 times and you'll hang.\n");
printf("For a word, type and enter 0. For an expression, enter 1:");
scanf("%i",&select);

//This section requests a file and loads it into struct
if(select==0)

   InputFile();
   banksize=LoadWordbank();
   srand((unsigned)time(&t));
   wordNum=rand() % banksize;
   wordsize=strlen(hangman.word[wordNum]);


char temp3[wordsize];
for(n=0;n<wordsize;n++)
   temp3[n]='_';
strcpy(hangman.progress,temp3);

if(select==1)
   wordsize=wordsize-2;

【讨论】:

以上是关于C Hangman 程序调试辅助(中止陷阱:6 错误)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C中的“中止陷阱:6”错误?

C中的中止陷阱6错误

使用 memset() 获取“中止陷阱 6”

我无法按字母顺序对文件中的“姓氏”进行排序:我得到中止陷阱:6

使用 py2app 捆绑 PyQt5 应用程序:不断收到“中止陷阱:6”错误

编码SLL时获取中止陷阱6