0

我将列表定义为:

typedef struct LinkNode LinkNode;
struct LinkNode {
     int value;
     LinkNode *next;
};

我在 main() 中使用了这个 LinkNode 类型:

int main()
{
    LinkNode *p;
    ...
}

当我在VS2010中进行单步调试时,有时调试器会将局部变量p的值显示为0xcccccccc{value = ??? next = ???},但我混淆的是在某些情况下 p->value 和 p->next 的值在调试中隐藏,p 的值显示为 Oxcccccccc。(成员的价值是不可见的)

我不知道这些表示背后的机制是什么。我只是用几乎相同的代码(不同的变量名但相同的数据结构)测试了两个项目,结果如上。所以有什么问题?

谢谢!

4

1 回答 1

2

LinkNode *p是一个未初始化的指针。您必须先构造对象,就像写int* a并尝试查看a指向什么。你必须写这样的东西:

struct LinkNode {
     LinkNode(int value = int(), LinkNode* next = nullptr) :
               value(val), next(next)
     {
     }

     int value;
     LinkNode *next;
};

int main()
{
    LinkNode* p = new LinkNode();
    ...
    delete p;
}

编辑
在 c 中,您必须使用 malloc 和 free... new 和 delete 是不允许的。

typedef struct LinkNodeTag {         
     int value;
     struct LinkNodeTag *next;
} LinkNode;

LinkNode a = malloc(...);
free(a);

不幸的是,我不记得 malloc 和 free 是如何工作的......

于 2012-12-10T10:38:43.860 回答