curtin@cbnewse.ATT.COM (C.S.Curtin) (02/17/90)
hello MSC5X gurus this is using MSC5.1, MS-DOS 4.01. i am having a memory problem with calloc/free and have had no success checking that the memory has been returned to MS-DOS. i have been trying to use the msc function _memavl() (telling you how much memory is available) and get the same value from _memval() regardless when it is called. (actually i would like to do sbrk(0) and verify where the heap point is but this does not work for the /AL (Large) model according to the manual. scenerio: > >Buffer *bp; > (A) >fprintf(stderr,"FREE memory %u\n",_memavl());/*print current value*/ > >bp = (Buffer *) calloc(1, sizeof (Buffer));/* allocate memory */ > (B) >fprintf(stderr,"FREE memory %u\n",_memavl());/*print new current value*/ > >free(bp);/* return memory */ > (A) >fprintf(stderr,"FREE memory %u\n",_memavl()); > my feeling is that B should be: B = A-sizeof(Buffer); but when it is executed A=B; the program runs fine otherwise. but i was getting memory allocation error cannot load command.com after execution. this occurs only when i put the above code in a loop 10,000 times. (just a for loop) (i wanted to make darn sure that the memory was getting free'd up after something weird is happening) thanks for the help any questions/comments/flames please respond via e-mail. thanks for craig curtin att!ihlpy!curtin
miller@b-mrda.ca.boeing.com (Mark Miller) (02/20/90)
It's been awhile, but I had success tracking a similar bug by using the heapcheck and heapwalk routines to report available free space. I had a similar problem, where command.com could not be reloaded. The cause was a hunk of memory that got "calloc"ed but never "free"d. By inserting heap check and heapwalk at the beginning and end of each function that allocates memory, I was able to find the bug. Happy bug hunting, ====================================================================== Mark R. Miller + Disclaimer: Opinions expressed Boeing Commercial Airplane Co. + are mine and mine alone, and Seattle, WA + not necessarily those of my Internet: miller@b-mrda.boeing.com + employer. Voicenet: (206) 237-0960 + + +++ Phillipians 4:13 +++ ======================================================================