骑士的错误去巡逻

时间:2017-04-22 14:19:16

标签: c++ visual-c++

我学习C ++并且我的代码有错误我不知道?

骑士去巡逻     //在这里输入代码

#include <iostream>
#include <stdio.h>
#include <conio.h>

using namespace std;

#define maxn 10

void ThuNuocDiTiepTheo(int i, int x, int y, int *q);
void InBanCo(int n);
void XoaBanCo(int n);

int BanCo[maxn][maxn];
int dx[8] = { 2,1,-1,-2,-2,-1,1,2 };
int dy[8] = { -1,-2,-2,-1,1,2,2,1 };
int n = 8;


void ThuNuocDiTiepTheo(int i, int x, int y, int *q) {
    int u, v, *q1;
    int k = 0;

    do {
        *q1 = 0;
        u = x + dx[k];
        v = y + dy[k];

        if ((u >= 0) && (u < n) && (v >= 0) && (v < n) && (BanCo[u][v] = 0)) 
        {
            BanCo[u][v] = i;
            if (i < n*n) {
            ThuNuocDiTiepTheo(i+1,x,y,q1);
            if (*q1 == 0) {
                BanCo[u][v] = 0;
            }
            else {
                *q1 = 1;
            }
        }
        k = k + 1;
    }

    } while ((*q1 == 0) && (k < 8));

    *q = *q1;
}

void XoaBanCo(int n) {
    for (int i = 0; i < n - 1;i++) {
        for (int j = 0; j < n - 1;j++) {
            BanCo[i][j] = 0;
        }
    }
}

void InBanCo(int n) {
     for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1; j++) {
            if (BanCo[i][j] < 10) {
                cout << " " << BanCo[i][j];
            }
            else { 
                cout << " " << BanCo[i][j];
            }

        }
        cout << "\n";
    }
}

void main() {
    int *q = 0;
    cout << "Nhap vao kich thuoc ban co: ";
    cin >> n; cout << "\n";
    XoaBanCo(n);
    cout << "\n";
    BanCo[0][0] = 1;
    ThuNuocDiTiepTheo(2,0,0,q);
    cout << "In ra ban co: ";
    InBanCo(n);

    system("pause");
}

这是错误

  

严重级代码说明项目文件行抑制状态错误C4700未初始化的本地变量&#39; q1&#39;使用

2 个答案:

答案 0 :(得分:1)

你的问题在这里:

void ThuNuocDiTiepTheo(int i, int x, int y, int *q) {
    int u, v, *q1;
    int k = 0;

    do {
        *q1 = 0;

您正在声明一个指针q1,但它指向一些随机内存,因为您尚未对其进行初始化。

*q1 = 0;将0写入此随机存储器位置。

您需要为该整数分配内存,然后使用newdelete运算符解除分配。

请注意,像这样管理内存并不是一个好主意,因为有更好,更安全的方法来做事。

答案 1 :(得分:0)

int u, v, *q1;

这些变量都没有初始化。

*q1 = 0;

*q1尝试取消引用未初始化的指针,之后您也没有为其指定值。这会导致未定义的行为

你的变量名称是完全不明白的,你的函数名称是我甚至不认识的语言,所以你不可能知道你打算在这里做什么。然而,即使没有那些知识,我当然可以给你的一个建议是:不要使用指针。重构所有内容以使用std::vector