【问题标题】:Segmentation fault(core dumped) in C program in ubuntuubuntu 中的 C 程序中的分段错误(核心转储)
【发布时间】:2021-07-19 00:52:48
【问题描述】:

我正在尝试创建一个迷宫游戏,我们在其中创建迷宫输入,例如 $ 用于敌人的奖励 X 等。我使用 * 作为边界。尽管该程序在 DEV C++ 中运行良好,但它在 C 中引发了分段错误。我只是看不出我做错了什么以及为什么它在 Windows 中工作但在 Ubuntu 中不工作。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
   
   int row, column;
   int player_row, player_column, final_row, final_column;
   int total_prize=0;
   int prize;  
   int dolar[50][50];  
   char maze[50][50];
   scanf("%d %d", &row, &column);  
   int i;
   int j;
   for(i=0;i<=row;i++){
           for(j=0;j<=column;j++){
               maze[i][j]='+';
       }
   }
   for(i=0;i<column;i++){
       maze[0][i]='*';
       maze[row-1][i]='*';
   }
   for(j=0;j<row;j++){
       maze[j][0]='*';
       maze[j][column-1]='*';
   }
   int details = 1;
   while(details==1){
       char detail;
       int row, column;
       //scanf("%s %d %d",&detail, &row, &column);
       scanf("%s", &detail);
       if(detail=='s'){
           scanf("%d %d", &row, &column);
           player_row = row;
           player_column = column;
           maze[row][column]='O';
       }
       else if(detail=='f'){
           scanf("%d %d", &row, &column);
           final_row =row;
           final_column = column;
           maze[row][column]=' ';  
       }
       else if(detail=='b'){
           scanf("%d %d", &row, &column);
           maze[row][column]='*';  
       }
       else if(detail=='$'){
           scanf("%d %d %d", &row, &column, &prize);
           //scanf("%d", &prize);
           dolar[row][column]=prize;
           maze[row][column]='$';  
       }
       else if(detail=='X'){
           scanf("%d %d", &row, &column);
           maze[row][column]='X';  
       }
       else if(detail="end"){
           maze[0][0]='*';
           maze[0][1]='*';
           maze[0][2]='*';
           maze[0][3]='*';
           break;  
       }           
   }
       for(i=0;i<=row;i++){
       for(j=0;j<=column;j++){
           if(maze[i][j]=='+'){
               printf(" ");        
           }
           else{
               printf("%c", maze[i][j]);
           }           
       }
       printf("\n");
   }

【问题讨论】:

  • @KfirVentura 没用。
  • 这不行:if(detail="end") detail 只是一个字符,不能和三个字符的字符串相同。这也是一个赋值失败,因为detail 不能保存指针。
  • 请提供您的意见。 rowcolumn 是什么?
  • 这也是错误的:scanf("%s", &amp;detail); 你必须提供一个字符串的地址。 detail 可以容纳 0 个字符,因为它已经用于终止 0 个字节。您可能想读取使用 %c 完成的单个字符。
  • 顺便说一句:您的编译器应该已经报告了其中一些错误。如果没有,请调高警告级别。如果它们被报告,请不要忽略编译器警告

标签: c ubuntu segmentation-fault coredump


【解决方案1】:

分段错误是由于指针的无效使用造成的。这是一个很好(糟糕)的例子:

int *ptr = 0;
*ptr = 17;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2021-03-04
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多