[so] Parametrii gresiti
Buna ziua, Imi este neclar ce trebuie sa se intample cu so-cpp cand programul da de parametrii gresiti. Am incercat sa il inchid cu return sau exit cu diferite coduri de eroare, dar testele vad ca inca pica. Multumesc anticipat,Spataru Mihai ___ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
Re: [so] [Tema1][General] Folosire macro DIE
Razvan Deaconescu writes: > Mihaila Corina via so writes: >> Buna ziua! >> >> Este in regula daca folosim DIE dupa fiecare alocare dinamica nereusita? >> Sau o sa ni se scada pentru ca nu dezalocam resursele inainte de a da exit? > > Bună, Corina. > > E OK să folosiți DIE. > > Toate resursele proprii / nepartajate procesului (memorie alocată, > fișiere deschise, thread-uri create) sunt eliberate și închise la > încheierea procesului (exit). Așa că nu e nevoie să eliberați nimic > înainte de exit. > > Am adăugat precizare și pe wiki[1]. Mi s-a șoptit în casă (mersi, Vali) că răspunsul de mai sus nu este 100% corect, așa că l-am actualizat[1]: --- Pe sistemele de operare general purpose de tipul Linux, *OS, Windows, *BSD, cu biblioteci standard C complexe, resursele proprii / nepartajate procesului (memorie alocată, fișiere deschise, thread-uri create) sunt eliberate și închise la încheierea procesului (exit). Pe aceste sisteme nu e nevoie să eliberați explicit înainte de exit; pot există medii specifice în care acest lucru nu se întâmplă. Cea mai bună practică (best practice) este să eliberați explicit resursele ca să acoperiți toate situațiile. --- > [1] https://ocw.cs.pub.ro/courses/so/teme/general#lista_depunctari Răzvan ___ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
Re: [so] [Tema1][Test38] NR_RUNS=1000 e prea mic
M-am gandit si eu initial la acelasi lucru si am redus toate dimensiunile alocarilor, dar problema pare sa fie cu numarul de apeluri, nu cu dimensiunea alocata. Poate totusi cele 1000 de incercari ajung sa aloce toata memoria disponibila fara ca aceasta sa mai fie eliberata. From: Vlad Lungu Sent: Sunday, March 8, 2020 5:30 PM To: Ştefan VODIŢĂ (94345) ; Sisteme de Operare Subject: Re: [so] [Tema1][Test38] NR_RUNS=1000 e prea mic Când declari hash-ul, ai grija la dimensiune. Nu ai nevoie de o tabelă hash de dispersie prea mare. On Sun, 8 Mar 2020, 16:56 Ştefan VODIŢĂ (94345) via so, mailto:so@cursuri.cs.pub.ro>> wrote: Salut! Am probleme la testul 38. Am folosit DIE pentru a opri executia de fiecare data cand o alocare esueaza. Atunci cand rulez checkerul vad outputul de la DIE repetat pentru diferite alocari. La final apare un mesaj out of memory care anunta ca va fi oprit procesul so-cpp, iar testul pica. Daca nu ma insel, se verifica consecutiv fiecare alocare prin care se trece la rulare, dar acest lucru e limitat la 1000 de incercari. In cazul meu, am numarat 1010 linii de eroare pana s-a oprit programul. Nu stiu de ce sunt 10 in plus, dar deduc ca la testul 38 fac mai mult de 1000 de alocari si checkerul nu continua verificarea mai departe de NR_RUNS=1000. E corecta presupunerea mea? Daca nu, din ce cauza ar putea sa apara problema pe care o am? Multumesc, Stefan Vodita ___ http://ocw.cs.pub.ro/courses/so/info/lista-discutii ___ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
Re: [so] Parametrii gresiti
Salut, Mihai! Când programul primește parametri greșiți, trebuie să terminați execuția programului cu o valoare diferită de 0. [1] https://ocw.cs.pub.ro/courses/so/teme/tema-1#precizari_generale Numai bine, Răzvan On Mon, Mar 9, 2020 at 9:01 AM Mihai Sp via so wrote: > > Buna ziua, > > Imi este neclar ce trebuie sa se intample cu so-cpp cand programul da de > parametrii gresiti. Am incercat sa il inchid cu return sau exit cu diferite > coduri de eroare, dar testele vad ca inca pica. > > Multumesc anticipat, > Spataru Mihai > > ___ > http://ocw.cs.pub.ro/courses/so/info/lista-discutii -- Răzvan Crainea ___ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
[so] [Tema1][Test38] calloc nu intoarce NULL
Salut, La testul 38, in (mini-preprocessor.c, 17), calloc-ul nu întoarce NULL, drept urmare nu pot ieși cu return code-ul 12. Dacă înlocuiesc calloc-ul cu malloc-ul, treaba merge bine. Aveți idee care ar putea fi problema? Nici dacă fac un if pentru a testa dacă acel pointer este NULL nu trece de acea parte. Mulțumesc și o zi frumoasă, Dorin Geman ___ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
Re: [so] [Tema1][Test38] calloc nu intoarce NULL
Probabil altceva e aiurea, pt că calloc cu siguranță poate returna NULL. Vezi pagina de manual, "man 3 calloc". Poate checkerul nu face el ceva ca să dea NULL? On Mon, Mar 9, 2020, 12:41 Dorin Geman via so wrote: > Salut, > > La testul 38, in (mini-preprocessor.c, 17), calloc-ul nu întoarce NULL, > drept urmare nu pot ieși cu return code-ul 12. > Dacă înlocuiesc calloc-ul cu malloc-ul, treaba merge bine. > Aveți idee care ar putea fi problema? > Nici dacă fac un if pentru a testa dacă acel pointer este NULL nu trece de > acea parte. > > Mulțumesc și o zi frumoasă, > Dorin Geman > ___ > http://ocw.cs.pub.ro/courses/so/info/lista-discutii ___ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
Re: [so] [Tema1][Test38] calloc nu intoarce NULL
Imi poti spune __ce__ returneaza calloc? Alternativ (si nu vad o problema) poti face: - malloc - memset(your_ptr, 0, sizeof(your_ptr_datatype)) Checkerul din cate stiu face LD_PRELOAD la malloc dar nu si la calloc, asa ca mai multe informatii ne-ar ajuta On Mon, 9 Mar 2020 at 12:41, Dorin Geman via so wrote: > > Salut, > > La testul 38, in (mini-preprocessor.c, 17), calloc-ul nu întoarce NULL, drept > urmare nu pot ieși cu return code-ul 12. > Dacă înlocuiesc calloc-ul cu malloc-ul, treaba merge bine. > Aveți idee care ar putea fi problema? > Nici dacă fac un if pentru a testa dacă acel pointer este NULL nu trece de > acea parte. > > Mulțumesc și o zi frumoasă, > Dorin Geman > ___ > http://ocw.cs.pub.ro/courses/so/info/lista-discutii -- Cu stimă, Mihai Bărbulescu ___ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
Re: [so] [Tema1][Test38] calloc nu intoarce NULL
On Mon, Mar 9, 2020 at 12:53 PM Mihai Barbulescu wrote: > Imi poti spune __ce__ returneaza calloc? > > Alternativ (si nu vad o problema) poti face: > - malloc > - memset(your_ptr, 0, sizeof(your_ptr_datatype)) > > Checkerul din cate stiu face LD_PRELOAD la malloc dar nu si la calloc, > asa ca mai multe informatii ne-ar ajuta > > Am rezolvat! Era un DIE pus gresit. > Multumesc! > Dorin Geman ___ http://ocw.cs.pub.ro/courses/so/info/lista-discutii