进程返回26866464< 0x28FE00>错误

时间:2015-01-21 08:35:32

标签: c

我正在用C语言编写一个计算机编程课,我正在尝试实现一个用于Knight巡回演出问题的算法。我意识到C没有布尔值,除非你自己设计它们或者把'0'和'1'设为真和假并与它们保持一致。我决定使用后者,并编译但是说“Process返回26866464< 0x28FE00>”我从互联网上提供的伪代码编写了这个程序,我理解了Knight's Tour和这段代码的想法,但我无法确切地指出究竟是什么错误。我觉得我打印它的方式有点不对劲。

#include <stdio.h>
#include <stdbool.h>
#define N 5

bool algorithmMove(int x, int y, int m)
{
   bool visited[N][N];
   visited[N][N] == false;

   if (x < 0 || x >= N || y < 0 || y >= N)
   {
       return false;
   }
   if (visited[x][y] == true)
   {
       return false;
   }
   if (m = (N*N) - 1)
   {
       printf("A solution has been found");
       printf("x, y");
       visited[x][y] == true;
       return true;
   }
   else
   {
       bool result;
       result = false;

       result = result || algorithmMove(x+2, y+1, m+1);
       result = result || algorithmMove(x+2, y-1, m+1);
       result = result || algorithmMove(x-2, y+1, m+1);
       result = result || algorithmMove(x-2, y-1, m+1);
       result = result || algorithmMove(x+1, y+2, m+1);
       result = result || algorithmMove(x+1, y-2, m+1);
       result = result || algorithmMove(x-1, y+2, m+1);
       result = result || algorithmMove(x-1, y-2, m+1);

       if (result = true)
       {
           printf("x, y");
           return true;
       }
       else
       {
           visited[x][y] == false;
           return false;
       }
   }
}

main()
{
   algorithmMove(2, 4, 0);
}

1 个答案:

答案 0 :(得分:0)

visited[N][N] == false;

这不是赋值运算符,它是一个比较运算符(==),你需要像

那样解决这个问题
visited[N-1][N-1] = false; /* Array access should be within bound */

同样的修复需要在多个地方完成。

在不初始化数组元素的情况下,您可以将它们用于比较,如

visited[x][y] == true 

使用未初始化的变量将导致未定义的行为