De exemplu, odata incercam sa aloc dinamic liste de adiacenta pentru un graf folosind realloc. Am generat un fisier de test cu mai multe muchii, si cand am rulat programul se bloca inexplicabil. Am facut debug pas cu pas si am constat ca la un moment dat, cand incerca sa aloce o muchie aparea ecranul negru si nu se intampla nimic, ceva de genul bucla infinita.
Alocai cu malloc si erai in modelul de memorie small. Malloc aloca din heap (64k max pe small) si doar pe modelele de memorie compact, large sau huge aloca din far heap (unde ai spatiu cat te tine RAMul sau nelimitat in windows/linux). Daca la programul ala compilai cu model de memorie compact, iti mergea perfect.
Daca vrei sa nu depinzi de modelul de memorie aloca memoria cu farmalloc.. dar ai grija ca apoi trebuie peste tot sa lucrezi cu far pointeri (ex: int far *a). Prin urmare scanf nu o sa mearga cu variabilele respective (el lucreaza cu pointeri, nu cu far pointeri) si inca cateva functii care trebuie sa le tratezi mai special (memcopy devine fmemcopy... etc)
Sau.. poti sa bati comisia de la OJI la cap sa compileze toate sursele cu modelul de memorie compact sau large (huge nu recomand).. tot ce au de facut este sa adauge -ml la linia de compilare.
Sau.. poti sa folosesti pragma si sa setezi explicit in programul tau modelul de memorie in care vrei sa compilezi (dar daca ai un model specificat cu pragma si la compilare setezi alt model, nu stiu exact pe care din cele doua le ia in considerare)
Alocarea de memorie merge foarte bine in BC, doar ca este putin mai complex facuta dupa cum am detaliat mai sus.. este asa ca acel compilator poate creea executabile si pentru procesoare 386, care nu aveau decat 64k + memorie extended paginata sau chiar procesoare mai varza