PRB: Apparent _memval() Failure Caused by printf() Allocation

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:

SYMPTOMS

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.

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:

/* 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