Microsoft KB Archive/60488

{|
 * width="100%"|

PRB: Apparent _memval Failure Caused by printf Allocation

 * }

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: - The C Run-time (CRT), included with: - 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 -- 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 #include size_t mavl; char *ptr; void main(void) { // printf(&quot;If included, this line solves the problem.\n&quot;); printf(&quot;memory available=%u \n&quot;,mavl=_memavl); if ((ptr=(char *)malloc(mavl))==NULL) printf(&quot;Not as much memory available as we thought!&quot;); } Additional reference words: 1.00 1.50 6.00 6.00a 6.00ax 7.00 KBCategory: kbprg kbprb KBSubcategory: CRTIss

Keywords : kb16bitonly

Issue type :

Technology : kbVCsearch kbAudDeveloper kbCRT