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

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