[MontelLUG] Impossibilità di utilizzare variabili statiche o globali

Stefano Fraccaro stefano.fraccaro a gmail.com
Dom 10 Apr 2016 17:15:25 CEST


Memory leak? Sicuro che il codice sia 'thread safe'?

Stefano
Fellow FSFE
Il 10/apr/2016 12:19, "Samuele" <samuele.zanin a tiscali.it> ha scritto:

> Il mio viscerale odio per il C è noto, purtroppo ogni tanto mi tocca
> averci a che fare.
>
> L'altro giorno, stavo tentando di fare una funzione di log su file di
> dati. Un'unica funzione, con due parametri, il tipo di operazione
> (apertura, chiusura, scrittura) ed un array di char con i dati da loggare.
>
> Inizialmente il descrittore del file era dichiarato come variabile
> statica. All'apertura del file, si pianta tutto.
> Descrittore dichiarato come variabile locale funziona.
> Mi turo il naso e lo dichiaro come variabile globale: blocco del programma
> (d'altronde da quanto leggo, statiche e globali vengono trattate allo
> stesso modo).
> Mi rituro il naso e porconando, dichiaro il descrittore come variabile
> locale nel main e la passo come parametro in tutte le funzioni dove mi
> server. Funziona (Csytemd!!!).
> Qualsiasi altro tipo di variabile globale che tento di dichiarare da lo
> stesso comportamento (ho già un'altra serie di variabili globali già in
> uso). Lo sò che non si devono usare, ma sono variabili tipo il buffer della
> seriale, gli oggetti di gpio ecc.
>
> Qualche spiegazione razionale del fenomeno?
>
> Dopo un paio d'ore mi accorgo che comunque il programma si pianta
> (interviene il watchdog).
> Di solito questo succede quando la memoria va a puttane.
> Peccato che senza la funzione di log, tutto vada bene.
> Ipotizzo che sia la dimensione del file troppo grande, quindi al
> raggiungimento delle 3000 righe di log, chiudo e apro un nuovo file. Adesso
> il programma si pianta molto prima, quindi mi vien da dire che il problema
> sia nella funzione di apertura del file (fileopen).
>
> Ho provato in velocità qualche programma di analisi statica del codice, ma
> non sono riuscito a farli andare.
> Da un punto di vista della logica del programma, non ho problemi, tutto è
> corretto, ma capire cosa fa il compilatore C £"$%£"$%£$%$"£!!! non è alla
> mia portata.
>
> Il programma è sviluppato su piattaforma mbed, ho 32 KB di ram, gli altri
> 32 sono dedicati alla ethernet.
>
> https://developer.mbed.org/handbook/Memory-Model
>
> Qualsiasi consiglio è ben accetto.
>
>
> _______________________________________________
> montellug mailing list
> montellug a montellug.it
> http://mail.montellug.it/mailman/listinfo/montellug
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://mail.montellug.it/pipermail/montellug/attachments/20160410/23cacef3/attachment.html>


Maggiori informazioni sulla lista montellug