我将列表定义为:
typedef struct LinkNode LinkNode;
struct LinkNode {
int value;
LinkNode *next;
};
我在main()中使用此LinkNode类型:
int main()
{
LinkNode *p;
...
}
当我在VS2010中进行单步调试时,有时调试器会将局部变量p的值显示为0xcccccccc {value = ??? next = ???},但我混淆的是在某些情况下p->值和p-> next的值在调试中隐藏,p的值显示为Oxcccccccc。 (会员资格的价值是看不见的)
我不知道这些表示背后的机制是什么。我只是用几乎相同的代码(不同的变量名但是相同的数据结构)测试两个项目,结果如上所述。那有什么问题?
谢谢!
答案 0 :(得分: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和免费工作......