[comp.sys.ibm.pc] msc memory allocation problems

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 +++    
======================================================================