[alt.msdos.programmer] msc memory allocation problem

curtin@cbnewse.ATT.COM (craig.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

CMH117@psuvm.psu.edu (Charles Hannum) (02/19/90)

"%u" prints a short (16-bit) integer.  Your pointers are 32 bits.  Use "%lu".


Virtually,
- Charles Martin Hannum II       "Klein bottle for sale ... inquire within."
    (That's Charles to you!)     "To life immortal!"
  cmh117@psuvm.{bitnet,psu.edu}  "No noozzzz izzz netzzzsnoozzzzz..."
  c9h@psuecl.{bitnet,psu.edu}    "Mem'ry, all alone in the moonlight ..."