Ho modificato il codice in questo modo:
codice:
void lista::eliminapari(){
nodo *p, *del;
int n=0;
p=l;
if (l==0)
cout<<"La lista è vuota";
while(p!=0){ //Scorro la lista
if (n%2==0 && n==0 ){ //Devo eliminare il primo elemento:
del=p;
p=p->succ;
l=p;
delete del;
cout<<"0 elemento cancellato\n";
n++;}
else if (n%2==0 && n!=0){ //Se n è pari
del=p->succ;
p->succ=p->succ->succ;
delete del; //Elimino l'elemento
cout<<n<<"elemento cancellato\n";
n++;
}
else
p=p->succ; //Passo all'elemento successivo
n++;} //Incremento n
dando in input 4 elementi l'output è questo:
0 elemento cancellato
2elemento cancellato
4elemento cancellato
Exception: STATUS_ACCESS_VIOLATION at eip=00401E29
eax=00000000 ebx=00000000 ecx=00000004 edx=00000001 esi=61276520 edi=611A1E9F
ebp=0028AC18 esp=0028ABF0 program=C:\Users\WORK\Desktop\UNICAS\Programmazion e a Oggetti\esami oop\23giugno2009 da RIvedere\dist\Debug\Cygwin_4.x-Windows\23giugno2009_da_rivedere.exe, pid 2412, thread main
cs=0023 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame Function Args
0028AC18 00401E29 (0028AC44, 0028AC48, 0028AC48, 5AD07A45)
0028AC68 0040144C (00000001, 0028AC90, 80010100, 612765F0)
0028ACF8 6100763A (00000000, 0028CD78, 61006C50, 00000000)
End of stack trace
RUN FAILED (exit value 1, total time: 9s)
Se modifico la clausola del ciclo while e anzichè while(p) dico while (p->succ) non mi da errore, ma ovviamente non cancella l'ultimo elemento se è pari.
help!!!