<div dir="ltr"><div><div><div>Buna tuturor,<br><br></div>Am reusit sa gasesc care erau problemele care imi cauzau acel comportament ciudat.<br></div><div>Am reimplementat unele dintre functiile hashtable-ului care imi creau probleme.<br></div><div><br></div>Multumesc mult pentru feedback, Mihai.<br></div><div>M-a ajutat sa fac debugging si sa imi rezolv din probleme.<br><br></div><div>Numai bine,<br></div><div>Adriana<br></div><div><br><br></div><br></div><div class="gmail_extra"><br><div class="gmail_quote">Pe 14 martie 2017, 00:26, Mihai Barbulescu <span dir="ltr"><<a href="mailto:b12mihai@gmail.com" target="_blank">b12mihai@gmail.com</a>></span> a scris:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Mai incerc sa inteleg de ce _doar_ pt 8 caractere ai problema asta<br>
insa pana la aia ai unele mai mari:<br>
<br>
1. aloci pt buffs si params 100000 si 50000 -> e cam mult la alocarea<br>
asta statica si imi zic astea ca poate d-aia pica testele de pe Linux.<br>
2. hash.c -> nu trebuia sa regenerezi libhash.so. libhash.so SE DA in<br>
tema si tre` doar sa te linkezi cu el. Sursa hash.c am dat-o pt cei<br>
care dezvolta pe masini cu alta arhitectura decat vm-ul de SO. Sa<br>
corectezi acest aspect te rog.<br>
3. Formularea strcpy( cmd, strtok( buff, " " ) ); nu prea imi place.<br>
strcpy oricum e known to offer buffer overflows. Incearca folosirea<br>
strncpy si salveaza ce genereaza strtok intr-o variabila, poate<br>
de-acolo vin probleme<br>
<br>
Pe langa ele adaug:<br>
<br>
4. Intr-adevar: pe o masina cu ubuntu 14.04 cu 64 bit tema ta trece<br>
toate testele, dar pe cea de SO nu trece (cea de SO fiind si cea de pe<br>
vmchecker!). Verifica daca si initializezi memoria folosita/alocata.<br>
5. Vad ca bagi extra lines/whitespaces - nu ca ar fi neaparat asta o<br>
problema, dar ne-am mai fript, vezi atat precizarea din enunt cat si<br>
discutia de aici:<br>
<a href="https://www.mail-archive.com/so@cursuri.cs.pub.ro/msg03743.html" rel="noreferrer" target="_blank">https://www.mail-archive.com/<wbr>so@cursuri.cs.pub.ro/msg03743.<wbr>html</a><br>
6. Apropo de cifra magica 8, valgrind imi da cu virgula pe testul 2,<br>
verifica outputul de mai jos (si ti-am zis sa rulezi cu valgrind) si<br>
uita-te ce-ai prin functiile add si print ale hashtable-ului. Si n-am<br>
inteles ce vrei sa faci in jur de linia 169 p-acolo cu if-ul ala fara<br>
nimic.<br>
<br>
==8507== Invalid write of size 1<br>
==8507== at 0x4C2E1F3: strcpy (in<br>
/usr/lib/valgrind/vgpreload_<wbr>memcheck-amd64-linux.so)<br>
==8507== by 0x402406: createntry (util.c:144)<br>
==8507== by 0x402571: add (util.c:175)<br>
==8507== by 0x400E51: readFromStdin (tema1.c:22)<br>
==8507== by 0x401E73: main (tema1.c:214)<br>
==8507== Address 0x53fe928 is 0 bytes after a block of size 8 alloc'd<br>
==8507== at 0x4C2AB80: malloc (in<br>
/usr/lib/valgrind/vgpreload_<wbr>memcheck-amd64-linux.so)<br>
==8507== by 0x4023E6: createntry (util.c:142)<br>
==8507== by 0x402571: add (util.c:175)<br>
==8507== by 0x400E51: readFromStdin (tema1.c:22)<br>
==8507== by 0x401E73: main (tema1.c:214)<br>
==8507==<br>
==8507== Invalid read of size 1<br>
==8507== at 0x5084943: vfprintf (vfprintf.c:1661)<br>
==8507== by 0x508D3D8: printf (printf.c:33)<br>
==8507== by 0x402A65: print (util.c:312)<br>
==8507== by 0x401184: readFromStdin (tema1.c:59)<br>
==8507== by 0x401E73: main (tema1.c:214)<br>
==8507== Address 0x53fe928 is 0 bytes after a block of size 8 alloc'd<br>
==8507== at 0x4C2AB80: malloc (in<br>
/usr/lib/valgrind/vgpreload_<wbr>memcheck-amd64-linux.so)<br>
==8507== by 0x4023E6: createntry (util.c:142)<br>
==8507== by 0x402571: add (util.c:175)<br>
==8507== by 0x400E51: readFromStdin (tema1.c:22)<br>
==8507== by 0x401E73: main (tema1.c:214)<br>
<br>
NOTE TIP pentru : verificati memory leak-urile si accesele nevalide la<br>
memorie (buffer overflows, acces memorie nealocata etc) folosind<br>
tutorialul de valgrind de aici [1] si gdb [1']. Debugati tema in<br>
masina virtuala de SO si nu altundeva [2]<br>
<br>
[1]: <a href="https://ocw.cs.pub.ro/courses/so/laboratoare/laborator-05#exercitiul_5_-_lucru_cu_memoria_-_valgrind_1p" rel="noreferrer" target="_blank">https://ocw.cs.pub.ro/courses/<wbr>so/laboratoare/laborator-05#<wbr>exercitiul_5_-_lucru_cu_<wbr>memoria_-_valgrind_1p</a><br>
[1']: <a href="https://ocw.cs.pub.ro/courses/so/laboratoare/resurse/gdb" rel="noreferrer" target="_blank">https://ocw.cs.pub.ro/courses/<wbr>so/laboratoare/resurse/gdb</a><br>
[2]: <a href="https://ocw.cs.pub.ro/courses/so/info/mv" rel="noreferrer" target="_blank">https://ocw.cs.pub.ro/courses/<wbr>so/info/mv</a><br>
<div class="HOEnZb"><div class="h5"><br>
<br>
2017-03-13 19:28 GMT+02:00 Adriana Dinca <<a href="mailto:dinca.adriana2@gmail.com">dinca.adriana2@gmail.com</a>>:<br>
> Buna din nou,<br>
><br>
> Am reusit sa reproduc problema descrisa initial.<br>
><br>
> Codul sursa este cel de pe vmchecker.<br>
><br>
> Continutul fisierului _test/inputs/<a href="http://test2.in" rel="noreferrer" target="_blank">test2.in</a>:<br>
> add vilfredo<br>
> print<br>
><br>
> Rulez urm. comand in Cygwin:<br>
> $./tema1.exe 1 _test/inputs/<a href="http://test2.in" rel="noreferrer" target="_blank">test2.in</a><br>
><br>
> Nu obtin niciun rezultat.<br>
><br>
> Modific continutul fisiserului _test/inputs/test2.:<br>
> add vilfredo1<br>
> print<br>
><br>
> Rulez urm. comand in Cygwin:<br>
> $ ./tema1.exe 1 _test/inputs/<a href="http://test2.in" rel="noreferrer" target="_blank">test2.in</a><br>
> vilfredo1<br>
><br>
> Am observat ca am aceasta problema daca cuvatul adaugat are 8 caractere.<br>
><br>
> Eu nu reusesc sa gasesc o explicatie a acestui comportament.<br>
><br>
> Mihai, daca ai timp si poti sa iti arunci un ochi peste tema mea, as<br>
> aprecia.<br>
> Eu pot sa o urc si pe bitbucket daca iti e mai comod.<br>
><br>
> Username-ul meu de cs este adriana.dinca.<br>
> Folosesc pentru rularea testelor masina virtuala de SO.<br>
><br>
><br>
> Numai bine,<br>
> Adriana<br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
> Pe 13 martie 2017, 14:57, Mihai Barbulescu <<a href="mailto:b12mihai@gmail.com">b12mihai@gmail.com</a>> a scris:<br>
>><br>
>> Buna,<br>
>><br>
>> M-am uitat pe noua submisie a ta de pe vmchecker, vad niste buffer<br>
>> overflow-uri (nu m-am uitat in cod, doar pe rularile Linux/Windows),<br>
>> da-i si cu un valgrind inainte sa vezi pe unde dai p-afara cu memoria.<br>
>> Nu alocarea e problema ci faptul ca undeva dai peste.<br>
>><br>
>> Atat la rularea cu GDB (apropo, baga cu cgdb e mai draguta interfata)<br>
>> cat si la cea cu VALGRIND ai grija sa compilezi cu -g si sa stergi<br>
>> orice alta -O optiune de optimizare pentru a prinde mai usor problema.<br>
>> Si dai cu valgrind peste unul din testele care pica in Linux.<br>
>><br>
>> Alt hint pe care il vad e la 24) Test double... -> pare ca outputul<br>
>> tau e bun dar ai bagat un funny character in forma de triunghi<br>
>> p-acolo, nu stiu cum reusesti sa il bagi, poate nu pui \0 cand prntezi<br>
>> stringu`, nu imi dau seama.<br>
>><br>
>> -marci nona megen jerry rachmaninoff frederique vanny alyss carlee<br>
>> betsey winona daphna cindie wynn jeanie<br>
>> +marci nona megen jerry rachmaninoff frederique vanny alyss carlee<br>
>> betsey winona daphna cindie wynn jeanie<br>
>><br>
>> Momentan astea sunt singurele idei acum.<br>
>><br>
>> 2017-03-13 14:11 GMT+02:00 Adriana Dinca <<a href="mailto:dinca.adriana2@gmail.com">dinca.adriana2@gmail.com</a>>:<br>
>> > Buna Mihai,<br>
>> ><br>
>> > Pe vmchecker e urcata ultima arhiva care care la rulare din Cygwin imi<br>
>> > genereaza outputuri diferite pt testul 2.<br>
>> > Username-ul meu de cs este adriana.dinca.<br>
>> ><br>
>> > Cred ca acest comportament se datoreaza modului in care programul meu<br>
>> > aloca<br>
>> > memoria.<br>
>> ><br>
>> > Am incercat astazi sa reproduc problema si nu am mai reusit.<br>
>> ><br>
>> > In schimb obtin outputuri diferite la rularea aceluiasi executabil cu<br>
>> > aceleasi argumente pentru un alt test.<br>
>> ><br>
>> > O sa rulez cu gdb sa vad daca gasesc problema.<br>
>> ><br>
>> > Multumesc pt raspuns.<br>
>> ><br>
>> > O zi faina,<br>
>> > Adriana<br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> ><br>
>> > On 13 Mar 2017 7:59 a.m., "Mihai Barbulescu" <<a href="mailto:b12mihai@gmail.com">b12mihai@gmail.com</a>> wrote:<br>
>> ><br>
>> > 2017-03-12 20:05 GMT+02:00 Adriana Dinca via so <<a href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a>>:<br>
>> >> Buna tuturor,<br>
>> >><br>
>> >> Am urmatoarea problema atunci cand rulez <a href="http://test2.in" rel="noreferrer" target="_blank">test2.in</a>.<br>
>> >><br>
>> >> Pe Linux testul imi trece fara probleme.<br>
>> >><br>
>> >> Pe Windows are urmatorul comportament:<br>
>> >> - daca rulez executabilul din Cygwin si dau comenzile de la stdin obtin<br>
>> >> outputul corect<br>
>> >> - daca rulez executabilul din Cygwin si dau ca parametru fisier-ul cu<br>
>> >> aceleasi comenzi nu imi afisaza nimic. (nici macar printf de pe primul<br>
>> >> rand<br>
>> >> al main-ului)<br>
>> >> - daca rulez executabilul din Visual Studio Power Shell imi afisaza<br>
>> >> printf<br>
>> >> de pe primul rand din main, insa crapa si cand citesc de la stdin sau<br>
>> >> din<br>
>> >> fisier.<br>
>> >><br>
>> >> Mentionez ca folosesc doar functii ANSI C si ca lucrez pe masina<br>
>> >> virtuala<br>
>> >> pusa la dispozitie de catre echipa de SO.<br>
>> >><br>
>> >> Daca modific continutul fisierului <a href="http://test2.in" rel="noreferrer" target="_blank">test2.in</a> prin modificarea lungimii<br>
>> >> cuvantului adaugat (fie < 8 caractere / > 8 caractere) nu apar<br>
>> >> problemele<br>
>> >> descrise mai sus.<br>
>> >><br>
>> >> Am observat ca testul imi crapa daca adaug cuvinte care au lungimea<br>
>> >> egala<br>
>> >> cu<br>
>> >> 8 caractere.<br>
>> >> Daca inlocuiesc "vilfredo" cu "aaaaaaaa" obtin acelasi comportament.<br>
>> >> In schimb daca inlocuiesc cu "aaa" sau "aaaaaaaaaaaaa" merge fara<br>
>> >> probleme.<br>
>> >><br>
>> >> Daca ati mai intalnit aceasta problema sau aveti vreo idee din ce cauza<br>
>> >> obtin acest comportament ciudat, v-as ruga sa imi dati de stire.<br>
>> >><br>
>> >> Multumesc!<br>
>> >><br>
>> ><br>
>> > Buna,<br>
>> ><br>
>> > Nu am reusit inca sa ma prind de acest comportament ciudat al tau. Pe<br>
>> > vmchecker e ultima versiune a codului care reproduce acest<br>
>> > comportament?<br>
>> > Eventual poti rula <a href="http://test2.in" rel="noreferrer" target="_blank">test2.in</a> pas cu pas si sa ne dai aici pe lista tot<br>
>> > output-ul + descrierea comportamentului? E OK, ca nu dai cod sursa.<br>
>> > Asta ca sa stiu ce fac cand reproduc cu tema ta.<br>
>> ><br>
>> > De asemenea, pe Windows singurul scenariu valid este rularea din<br>
>> > Cygwin, nu va stresati cu rulat din visual studio debug shell sau<br>
>> > power shell sau windows cmd. Atat vmchecker cat si testele presupun<br>
>> > rularea din cygwin.<br>
>> ><br>
>> > --<br>
>> > Cu stimă,<br>
>> > Mihai Bărbulescu<br>
>> ><br>
>> ><br>
>><br>
>><br>
>><br>
>> --<br>
>> Cu stimă,<br>
>> Mihai Bărbulescu<br>
><br>
><br>
<br>
<br>
<br>
--<br>
Cu stimă,<br>
Mihai Bărbulescu<br>
</div></div></blockquote></div><br></div>