Microsoft KB Archive/98412

{|
 * width="100%"|

near Pointer to far Pointer Conversions Use DS

 * }

Q98412

6.00 6.00a 6.00ax 7.00 | 6.00 6.00a | 1.00 1.50 MS-DOS | OS/2 | WINDOWS kbtool -- The information in this article applies to: - The Microsoft C/C++ Compiler (CL.EXE), 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 Visual C++ for Windows, versions 1.0 and 1.5 -- SUMMARY ======= When an application uses more than one memory model, pointer conversions must be performed correctly. The compiler converts a near pointer to a far pointer using the current value of the DS (data segment) register as the segment value. MORE INFORMATION ================ This behavior may cause a problem when the application converts a near pointer returned from a function to a far pointer and compares it to NULL. If the value of the near pointer is NULL, when the application converts it to a far pointer its value is DS:0000h, which cannot be equal to NULL. If the application must use more than one memory model, it can force the segment value to be 0h with the C run-time macro FP_SEG, as demonstrated below. Sample Code --- /* * Compile options needed: none */ #include #include char __near *func(void) { return NULL; } void main(void) { char _far *cptr; cptr = func; // Set segment value to DS FP_SEG(cptr) = 0; // Set segment value back to 0 } Additional reference words: kbinf 1.00 1.50 6.00 6.00a 6.00ax 7.00 8.00 8.00c KBCategory: kbtool KBSubcategory: CLIss

Keywords : kb16bitonly

Issue type :

Technology : kbVCsearch kbAudDeveloper kbCVCComp