No, diventa un macello utilizzare gli indici che partono da zero.
Normalmente io parto da zero, come andrebbe sempre fatto, ma in questo caso non potevo, per alcuni motivi.
Cmq... Anzitutto, grazie mille per la disponibilità, la pazienza e la celerità delle tue risposte.
Ora, sono riuscito a far arrivare il programma fino alla fine, cambiando qualche riga di codice.
Sembrerebbe che io abbia risolto, ma non ho capito COME ho risolto. In pratica, l'unico cambiamento che ho fatto è questo:
facendo riferimento al mio primo post (quello con gradient): ho tolto la malloc! Praticamente nel main ho messo:
Quote:
struct nodes gradients [(num_elements+1)][4];
|
(num_elements in quel momento è noto, naturalmente)
e poi ho cambiato l'intestazione della funzione, da
a
Quote:
int find_gradients (struct nodes gradients [][4])
|
quindi, dentro la find_gradients, non serve più la malloc e lavoro normalmente.
Fatto questo, tutto il programma sembra funzionare senza problemi (nel senso che riesce tranquillamente ad arrivare alla fine).
Ne deduco che, quindi, tutto il resto del codice era corretto. Da cui i miei dubbi sulla natura dei problemi che avevo.
Di cosa si trattava?
Due dubbi in particolare:
1 - di funzioni come la gradients ne ho 9 nel programma. Tutte del tipo: alloco, riempio, eventualmente ridimensiono, tutte che lavorano su variabili extern dichiarate nel main ecc...
Tutte identiche cmq, cambiano i nomi delle variabili e il loro tipo, ma le routine sono praticamente uguali. Anche il modo di usare gli indici, è uguale per tutte.
Nessuna dava problemi, se non la find_gradients (e il lavoro di sostituire la malloc con la dichiarazione nel main l'ho fatto solo per lei).
L'unica peculiarità che mi viene in mente riguardo la find_gradients, è che lei non lavora su un tipo standard (double, int ecc...), ma su una struct da me definita
2 - in realtà anche com'era scritta prima, la find_gradients funzionava. Quello che non funzionava, era tutto quel che seguiva. Praticamente:
con la malloc in find_gradients: find_gradients funzionava, ma non funzionava niente dopo (i problemi di cui parlavo, il programma terminava bruscamente alla malloc della funzione dopo find_gradients, cioè alla funzione di cui parlavo nel mio secondo post)
senza la malloc nel find_gradients: la find_gradients continua a funzionare e funzioano bene anche le altre funzioni che vengono dopo di lei.
...
Sembra tutto molto strano, ma è così. E' tutto il pomeriggio che ci sbatto la testa. E' scritto system ("PAUSE") e printf ovunque, per vedere fin dove arrivava il programma e a quale riga si bloccava.
Il problema sono le malloc. Se metto la malloc in find_gradients, poi tutte le malloc successive non funzionano. Non so perchè.
Qualche idea?
Chiedo perchè non mi piace la soluzione che ho adottato: manca di simmetria con il resto del codice, e mi costringe a fare una dichiarazione nel bel mezzo del programma, oltre che a dover passare la matrice gradients come argomento di tutte le funzioni successive (prima la usavo come extern).