Non ho controllato neppure a cosa serve il codice, però:
- Codice: Seleziona tutto
*nMax = 0;
Bang. nMax è dichiarato puntatore a long, e mai allocato.
Così, a occhio, allochi memoria per un vettore che non liberi mai; inoltre non ritorni un int da main (non so se in C è obbligatorio, mi pareva di sì; in c++ non lo è). Inoltre fai vari realloc su t senza averlo mai allocato, e non ne liberi mai la memoria. Il cast sul risultato di malloc-realloc non serve in c (serve in c++).
un altra cosa: sei io ho un vettore di puntatori e devo scambiare gli indirizzi come faccio?
Non ho capito. Se hai una situazione di vettori a puntatore di - che so io - interi, basta swapparli:
- Codice: Seleziona tutto
int* p[n];
int* q[n];
int* tmp; tmp=p[0]; p[0]=q[0]; q[0]=tmp;
(ci sono modi più furbi, senza la variabile temporanea di appoggio, ma non sono portabili)
Se invece intendi che hai una situazione nel quale vuoi che p punti al vettore precedentemente puntato da q, semplicemente non puoi farlo, perché gli array sono lvalue *non* modificabili. L'unica è dichiarare come puntatori
- Codice: Seleziona tutto
int** p=malloc(n*sizeof(int*))
int** q=malloc(n*sizeof(int*));
int** tmp; tmp=p;p=q;q=tmp;
Se l'array è il parametro di una funzione, in realtà viene trattato come un puntatore (dichiarare void f(char a[]) e void f(char* a) è *perfettamente* equivalente), e quindi te lo lascia fare:
- Codice: Seleziona tutto
void swap(int* a[], int* b[])
{
int** tmp=a; a=b; b=tmp;
}
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...