0

我有这个我的 g++ 似乎不喜欢的功能,我不知道为什么。

我写了它,所以它可能是错误的,但我看不到编译器指示的错误。

我在这里粘贴相关部分。

// STRUCT
struct node {
  int data;
  node * next;
};

// PROTOTYPE
void removeFirst( node ** root );

// DEFINITION
void removeFirst( node ** root ) {
    node * tmp = *root
    *root = tmp->next; // is equivalent to (*root)->next
}

linkedLists.cpp:89:2: error: invalid operands to binary expression ('node *' and 'node **')
        *root = tmp->next;
        ^~~~~
1 error generated.

注意:我实际上不需要删除 tmp,因为它只是一个普通的node *.

4

1 回答 1

3

;第一次作业后你错过了。因此,编译器读取你的函数就像

node *tmp = *root * root ...

这会导致错误。(提示:如果你不能得到编译器错误,总是向后看一行。)

此外,请考虑在删除第一个节点后释放内存 ( tmp),否则会出现内存泄漏。这取决于你如何分配节点:如果你是new他们,那么使用delete tmp; 如果您是malloc他们,请使用free(tmp). 好吧,如果您不为每个节点分配内存(例如,您分配整个节点数组然后使用它们),那么您不应该 deallocate tmp,但您可能希望将节点标记为空闲(取决于您如何管理数组节点)。

于 2013-09-15T17:26:26.523 回答