我在使用null时遇到麻烦

时间:2019-10-12 04:19:27

标签: c++

我试图在不使用STL的情况下解决算法问题。 但是在函数DFS中发生错误,调试器说“ w”是0xcccccc ........ 我该如何解决这个问题?????

#include<iostream>
#include<malloc.h>
#define MAX 1000
using namespace std;
bool visited[MAX];
typedef struct Queue
{
    int rear;
    int front;
    int queue[MAX];
    Queue()
    {
        rear = -1;
        front = -1;
    }
    int pop()
    {
        if (rear == front)
            return -1;
        front = (front + 1) % MAX;
        return queue[front];
    }
    void push(int data)
    {
        rear = (rear + 1) % MAX;
        if (rear == front)
            return;
        queue[rear] = data;
    }
}Queue;
typedef struct NODE
{
    int data;
    struct NODE* link;
    NODE()
    {
        data = -1;
        link = NULL;
    }
}NODE;
typedef struct Graph
{
    NODE*g[MAX] ;


    void insert(int u, int v)
    {
        if (g[u] != NULL)
        {
            NODE*tmp = (NODE*)malloc(sizeof(NODE));
            tmp->data = v;
            tmp->link = g[u];
            g[u] = tmp;
        }
        if (g[v] != NULL)
        {
            NODE*tmp = (NODE*)malloc(sizeof(NODE));
            tmp->data = u;
            tmp->link = g[v];
            g[v] = tmp;
        }
        if (g[u] == NULL)
        {
            NODE*tmp = (NODE*)malloc(sizeof(NODE));
            tmp->data = v;
            tmp->link = NULL;
            g[u] = tmp;
        }
        if (g[v] == NULL)
        {
            NODE*tmp = (NODE*)malloc(sizeof(NODE));
            tmp->data = u;
            tmp->link = NULL;
            g[v] = tmp;
        }

    }
}Graph;
void DFS(NODE*g[], int start)
{
    visited[start] = true;
    cout << start << '\n';
    for (NODE*w = g[start]; w; w = w->link)
    {
        if (!visited[w->data])
        {
            visited[w->data] = true;
            DFS(g, w->data);
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(false);
    int n, m, v;
    cin >> n >> m >> v;
    Graph graph;
    Queue q;

    while (m-- > 0)
    {
        int u, v;
        cin >> u >> v;
        graph.insert(u, v);
    }

    DFS(graph.g, 1);


}

我试图在不使用STL的情况下解决算法问题。 但是在函数DFS中发生错误,调试器说“ w”是0xcccccc ........ 我该如何解决这个问题?????

2 个答案:

答案 0 :(得分:2)

您可以通过使用调试器逐步执行代码,或者有时通过添加某种形式的日志记录来解决此类问题。您应该检查在编写代码时认为应该是什么情况,实际上是在执行代码期间发现情况。

在此示例中,如果您认为w不应为0xcccccc,那么您想调查w的来源以及为什么未将其设置为正确的值。您将继续向后遵循逻辑链,直到找到第一个点,程序没有按照您的预期去做,这就是您的错误。

答案 1 :(得分:2)

这里至少有两个问题:

  • 您永远不会将任何值设置为g,因此它充满了垃圾
  • 您在拥有结构或定义的同时,使用malloc创建了新结构。它永远不会被调用。使用new,因为它是c ++

做这些typedef struct事情也是非c ++的。只需使用struct X。您可能想使用类而不是结构。感觉就像将C代码复制到C ++中。

使用调试器的建议是合理的。逐行运行您的代码。同时将您的编译器警告最大化。

我也建议您使用更好的代码样式,使用更多的空格(例如NODE *variable...} name,函数之间的空行等以提高可读性,尤其是在向他人展示代码时。