我在以下代码中遇到了分段错误:
void print_stack(Node * root) {
while(root != NULL) {
// print the node
root = root->next;
}
}
虽然这有效:
int print_stack(Node ** root) {
Node * tmp = *root;
while(*root != NULL) {
// print the node
*root = (*root)->next;
}
*root = tmp;
}
问题是我做错了什么?对于这两个函数,我将Node指针的地址传递给列表的头部。我试图让第一个函数工作,因为它看起来更理想(没有指针分配,也没有永久更改根指针)..谢谢。
编辑:我在此处发布了代码:http://dpaste.com/477724/
答案 0 :(得分:1)
您传递了Node指针的地址,而该函数只接受了一个Node指针。
此:
print_stack(&main);
应该是这样的:
print_stack(main);
答案 1 :(得分:0)
发布所有代码,显示链接列表的初始化 - 似乎应该可以正常工作。
class Node
{
public:
Node();
Node *next;
};
Node::Node()
{
next = NULL;
}
void print_stack(Node * root)
{
while(root != NULL)
{ // print the node
root = root->next;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Node *root = new Node();
Node *begin = root;
for (int i=0;i<10;i++)
{
Node *pNew = new Node();
root->next = pNew;
root = pNew;
}
print_stack(begin);
return 0;
}
答案 2 :(得分:0)
您在链接中发布的程序中存在编译错误。
错误1: int print_stack(Node * root)
应该返回int
。但它的定义并没有这样做。
错误2:在切换案例中,在调用print_stack
时,应该传递类型Node*
而不是Node**
的参数。所以,它应该是print_stack(main);
。
错误3:在case u
切换功能中,推送功能参数应为push(&main, &d);