【发布时间】:2021-12-01 01:36:40
【问题描述】:
使用以下结构:
typedef struct lista {
int num;
struct lista * sig;
} nodo;
然后我们有以下函数来擦除由先前结构节点形成的链表:
void eliminarListaEntera(nodo * registro) {
nodo * aux = NULL;
while(registro->sig != NULL){
aux=registro->sig;
printf("Borrando nodo de la lista\n");
free(registro);
registro=aux;
}
free(registro);
registro = NULL;
}
我看到的问题:如果我在调用 eliminarListaEntera 之前和之后在 main() 中运行以下内容:
printf("POINTER %p\n", (void *) primerNodo);
我得到相同的值。调用delete函数后不应该是0(NULL)吗?
如果我再次尝试遍历它,我只会得到一个像 -159426562 这样的随机值,我猜这是因为它正在从内存中检索垃圾值。
【问题讨论】:
-
free()函数无法将指针设置为 NULL。 -
我明白了。我的意思是......我希望在删除列表后运行该 printf 函数时得到 0 或 NULL(鉴于我什至在完成函数之前将指针设置为 NULL)但事实并非如此。只是为了检查:如果我打印“指针”,它就是它指向的地址。 “&Pointer”将是该指针在内存中的地址,“*pointer”将取消引用该指针并检索它指向的值,对吗?因此,为什么我期望 0...
-
您必须将指向指针的指针传递到您的函数中才能更改调用函数中的值。这就是为什么
free()也不能将指针设置为 NULL。函数的最后一行没有任何用处。 -
您只需将
primerNodo的副本传递给该函数。实变量primerNodo不能从该函数内部修改。除此之外:你甚至不应该知道你会在那个地址找到什么值,因为在你把那个地址传递给free之后你就不能再访问那个内存了。 -
@JonathanLeffler:
free是否可以将指针设置为NULL无关紧要。eliminarListaEntera例程将registro设置为NULL,问题是为什么main中的指针不是NULL。
标签: c pointers linked-list