Skip to content
This repository has been archived by the owner on Dec 24, 2020. It is now read-only.

Latest commit

 

History

History

Q61972

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
layout title permalink
page
Q61972: Internal Compiler Error: @(#)regMD.c:1.100, Line 4634
/pubs/pc/reference/microsoft/kb/Q61972/

Q61972: Internal Compiler Error: @(#)regMD.c:1.100, Line 4634

Article: Q61972
Version(s): 6.00   | 6.00
Operating System: MS-DOS | OS/2
Flags: ENDUSER | buglist6.00
Last Modified: 29-MAY-1990

The sample code shown below generates the following internal compiler
error when compiled with the /Ole optimization switch in Compact and
Large memory models:

   foo.c(22) : fatal error C1001: Internal Compiler Error
               (compiler file '@(#)regMD.c:1.100', line 4634)
               Contact Microsoft Product Support Services

Sample Code
-----------

#include <stdio.h>
#include <malloc.h>

void main ()
{
   char *s1,*s2;
   int  len;
   char c;
   int j;

   s1 = malloc(sizeof(char *));
   s2 = malloc(sizeof(char *));

   s1 = "this is junk1";
   s2 = "this is junk2";
   len = 10;

   for(j=0; j<len; j++){
      c = s1[j];
      s1[j]=s2[j];
      s2[j] = c;     // This line causes error
      }

   printf (" Done swapping memory ");
}

The following are two suggested workarounds:

1. Use the #pragma optimize("le", off) statement at the beginning of
   the module to disable optimization and the #pragma optimize("", on)
   statement after the module to reenable optimization.

2. Make "c" a pointer to a character. For example, instead of

      char c;

   use the following:

      char *c = " ";

   Also, change the assignment from

      c = s1[j];

   to the following:

      c[0] = s1[j];