2016-04-13 11:17 GMT+03:00 Alin Gabriel Gheorghe <[email protected]>: > Problema era ca alocam (cu calloc) un char *buffer dupa ce apelam > VirtualAlloc si setam pointerul de start. > > Singura explicatie pentru acest comportament ar fi ca calloc-ul mapa memorie > peste memoria mea, dar e o explicatie fabricata de mine. Poate cineva sa > ofere o explicatie mai buna? >
E o problemă, deoarece zona este eliberată și alocările tale pot să fi făcute acolo. Mai târziu, te aștepți să o poți rezerva din nou. Rezervarea pagină cu pagină trebuie făcută imediat după eliberarea zonei mari. Încă ai unele alocări intermediare ce îți pot face probleme. PS: folosiți bottom-posting [1] în discuțiile de pe listă pentru o citire mai ușoară a intervențiilor > > În data de 13 aprilie 2016, 11:12, Adrian Stanciu > <[email protected]> a scris: >> >> 2016-04-13 11:02 GMT+03:00 Alexandru Jercaianu via so >> <[email protected]>: >> > Salut, >> > >> > Memoria eliberata cu VirtualFree trebuie sa fi fost alocată cu >> > VirtualAlloc. >> > Probabil apelezi VirtualFree peste ceva alocat cu MapViewOfFile. Aveam >> > aceeași problema. >> > >> > Alex Jercaianu >> > >> > Buna seara, >> > >> > Am intampinat o problema la rularea testelor pe masina virtuala. Se pare >> > ca >> > in functia vm_free() are un comportament nedeterminist, in sensul ca la >> > rularea checker-ului se activeaza un DIE din acea functie aleator >> > (intotdeauna unul ce contine un VirtualFree). Am incercat sa rulez >> > separat >> > testele care pica asa si am constatat ca uneori dau fail (cu eroarea de >> > mai >> > sus) si alteori pass fara probleme.* >> > >> > Mentionez ca local, pe sistemul meu de operare (Windows 7 x64), testele >> > trec >> > fara probleme la rulari succesive. De asemenea, mentionez si ca nu am >> > implementat functionalitate pentru mai multe apeluri vm_alloc() (sa fie >> > oare >> > de la asta?). >> > >> > Stie cineva care ar putea fi problema? >> > >> >> Salut, >> >> Pe lângă recomandarea lui Alex, să faci toți pașii de rezervare a >> paginilor virtuale unul după celălalt. Din ce văd în cod după ce >> eliberezi spațiul mare și până faci alocarea pagină cu pagină, mai >> faci unele alocări de memorie ce pot să fie plasate în spațiul ce îl >> vrei rezervat pentru paginile virtuale. Verifică dacă unele >> VirtualAlloc() dau eroare. Cred că de aici e comportamentul >> nedeterminist (depinde unde se fac acele alocări intermediare). >> >> Dacă nu e de la asta, să-mi spui. >> [1] http://ocw.cs.pub.ro/courses/so/info/lista-discutii#inlineinterleaved_posting Adrian _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
