PRB: Apparent _memval() Failure Caused by printf() AllocationLast reviewed: July 17, 1997Article ID: Q60488 |
6.00 6.00a 6.00ax 7.00 | 6.00 6.00a | 1.00 1.50
MS-DOS | OS/2 | WINDOWSkbprg kbprb
The information in this article applies to:
SYMPTOMSIn 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.
RESOLUTIONThe 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 INFORMATIONThe 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
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |