ID: Q60488
6.00 6.00a 6.00ax 7.00 | 6.00 6.00a | 1.00 1.50
MS-DOS | OS/2 | WINDOWS
kbprg kbprb
The information in this article applies to:
- Microsoft C for MS-DOS, versions 6.0, 6.0a, and 6.0ax
- Microsoft C for OS/2, versions 6.0, and 6.0a
- Microsoft C/C++ for MS-DOS, version 7.0
- Microsoft C/C++ for OS/2, version 7.0
- Microsoft Visual C++ for Windows, versions 1.0 and 1.5
In Microsoft C, the printf() function makes a call to malloc() the first time it is called within a program. Because of this allocation, _memavl() may seem to return an incorrect value in some cases.
If a call to _memavl() is made within or before the first printf() statement in a program, subsequent malloc() calls cannot allocate as much memory as _memavl() suggests.
The workaround is to make the call to printf() before your call to _memavl(), or make another call to _memavl() after printf() to determine your true maximum allocation.
The following code demonstrates the problem:
/* Compile options needed: none
*/
#include<malloc.h>
#include<stdio.h>
size_t mavl;
char *ptr;
void main(void)
{
// printf("If included, this line solves the problem.\n");
printf("memory available=%u \n",mavl=_memavl());
if ((ptr=(char *)malloc(mavl))==NULL)
printf("Not as much memory available as we thought!");
}
Additional reference words: 1.00 1.50 6.00 6.00a 6.00ax 7.00 KBCategory: kbprg kbprb KBSubcategory: CRTIss Keywords : kb16bitonly
Last Reviewed: July 18, 1997