Path: utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!bloom-beacon!apple!voder!pyramid!prls!philabs!sbcs!bnlux0!drs From: drs@bnlux0.bnl.gov (David R. Stampf) Newsgroups: comp.lang.c Subject: Re: Question about VMS C Message-ID: <607@bnlux0.bnl.gov> Date: 30 Aug 88 12:51:03 GMT References: <32725@cca.CCA.COM> Reply-To: drs@bnlux0.UUCP (David R. Stampf) Organization: Brookhaven National Lab., Upton, N.Y. Lines: 59 In article <32725@cca.CCA.COM> g-rh@CCA.CCA.COM (Richard Harter) writes: > > The following came up on VMS C. Either my understanding of >C is wrong, or the compiler is broken. The code ran as follows: > >char p[256]; >... >foo () { > ... > int i,j, *s[128]; > ... > for (i=0;i<128;i++) s[i] = (int *)malloc(128*sizeof(int)); > for (i=0;i<128;i++) { > p[i] = ' '; > p[i+128] = ' '; > for (j=0;j<128;j++) s[i][j] = 0; > } > ... > } > >When this code was executed sundry things were zeroed outside of s and >the vectors pointed to by the elements of s. When the double subscripting >was changed to *(s[i]+j) = 0 the code executed correctly. The double >subscripting executes correctly on a host of UNIX machines and on PRIMOS. > The gnomes at DEC seemed to have really screwed the C compiler in its latest release. I wouldn't trust *any* code that uses double subscripting at all. For example, the following "textbook" code also crashes and burns: main () { static char *char_tab[] = { "Monday", "Tuesday" }; int i,j; for (i = 0; i < 2; i++) for (j = 0; j < 4; j++) printf("'%c' '%c'\n",char_tab[i][j],*(char_tab[i] + j)); } If you compile it with the optimization off, it produces the correct output. Using all of the defaults in compiling however produces completely erroneous values for the char_tab[i][j] output. Makes you kind of uncomfortable with the rest of their compiler. This was compiled with the latest version of their compiler - V2.4 and under VMS 4.7. It worked with the previous release of the compiler and is still broken under VMS 5.0. I've reported this error to DEC, but I haven't heard a thing from them other than it also failed on their machines. You may want to report this as well and find a better C compiler. < dave stampf