如果cantLineas = 0,我想创建一个从列表中删除名为“archivo”的元素的方法,该方法正确地删除所有内容,但是当列表被完全删除时我无法将指针置为NULL 。 这是我写的代码:
struct archivo
{
char * nombre;
int cantLineas;
archivo * sig;
};
void borrarArchivos(archivo * listaArchivos){
archivo * ant=NULL;
while(listaArchivos!=NULL){
if(listaArchivos->cantLineas==0){
if(ant!=NULL){
ant->sig=listaArchivos->sig;
delete listaArchivos;
listaArchivos=ant->sig;
}else{
ant=listaArchivos;
listaArchivos=listaArchivos->sig;
delete ant;
ant=NULL;
}
if(ant==NULL && listaArchivos==NULL){
listaArchivos=NULL;
}
}else{
ant=listaArchivos;
listaArchivos=listaArchivos->sig;
}
}
}
答案 0 :(得分:0)
您正在传递指针listArchivos
by value, you have to pass it by reference。为了实现这一点,你必须传递一个双指针或一个指针的引用(见下面的代码):
双指针:
void borrarArchivos(archivo **listaArchivos) {
archivo *ant=NULL;
while(*listaArchivos!=NULL){
if((*listaArchivos)->cantLineas==0){
if(ant!=NULL){
ant->sig=(*listaArchivos)->sig;
delete *listaArchivos;
*listaArchivos=ant->sig;
}else{
ant=*listaArchivos;
*listaArchivos=(*listaArchivos)->sig;
delete ant;
ant=NULL;
}
if(ant==NULL && *listaArchivos==NULL){
*listaArchivos=NULL;
}
}else{
ant=*listaArchivos;
*listaArchivos=(*listaArchivos)->sig;
}
}
}
引用指针:
void borrarArchivos(archivo *&listaArchivos){
archivo * ant=NULL;
while(listaArchivos!=NULL){
if(listaArchivos->cantLineas==0){
if(ant!=NULL){
ant->sig=listaArchivos->sig;
delete listaArchivos;
listaArchivos=ant->sig;
}else{
ant=listaArchivos;
listaArchivos=listaArchivos->sig;
delete ant;
ant=NULL;
}
if(ant==NULL && listaArchivos==NULL){
listaArchivos=NULL;
}
}else{
ant=listaArchivos;
listaArchivos=listaArchivos->sig;
}
}
}
更好的是,使用C ++ STL的强大功能并使用smart pointers而不是原始C指针,并利用像std::vector
这样的STL容器来管理和存储对象。