ID Number: Q60488
6.00 6.00a 6.00ax 7.00 | 6.00 6.00a
MS-DOS | OS/2
Summary:
SYMPTOMS
In Microsoft C versions 6.0, 6.0a, 6.0ax, and C/C++ version 7.0 the
printf() statement 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.
RESOLUTION
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.
More Information:
The following code demonstrates the problem:
#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: 6.00 6.00a 6.00ax 7.00