netbsd-help: Bus error - simple (?) C program

Subject: Bus error - simple (?) C program
To: None <netbsd-help@netbsd.org>
From: Claude Marinier <claude.marinier@dreo.dnd.ca>
List: netbsd-help
Date: 09/10/2001 09:44:12
Hi,
I have been staring at this for a few days. There is likely an obvious
error in this code but I have not seen it yet. Could someone please point
it out to me? (I am beginning to suspect that it has to to with internal
addressing of the matrix elements.)
I wrote this to work on 'ulimit' issues. It appears to be a simple program
to create a large matrix and populate the diagonal with random numbers. It
now seems, from experience, that it is not simple.
When N is 700, it works as expected. When N is 800, it just prints "Bus
error". The system is NetBSD 1.5 on i386 with 128 MB of memory. I have
tried it on other systems.
OS / Platform			N	result
-------------			-	------
Solaris 7 / SPARC 4 GB		1400	OK
				1500	Segmentation fault
DecUnix 4.0G / Alpha 640 MB	700	OK
				800	Segmentation fault
VMS 7.2-1 / Alpha 320 MB	2000	OK
				10000	runs until exceeds page file quota
Note that, on the SPARC box, I used both the Sun and GNU compilers. On the
other boxes, I used the native compilers.
The program follows.
Thank you.
/*
 *	Test program with a big matrix.
 */
#include <stdio.h>
#include <stdlib.h>
#define N 10000
int main( void )
{
 int i;
 float matrix[N][N];
 printf( "Big Matrix\n\n" );
 printf( "The matrix is %d by %d; it has %d elements.\n", N, N, N*N );
 printf( "It uses %d bytes.\n", sizeof(matrix) );
 for ( i = 0; i < N; i++ ) {
	matrix[i][i] = (float) random();
 }
 printf( "\n" );
 printf( "The last element of the matrix if %12.10f\n", matrix[N-1][N-1] );
 printf( "\n" );
 return;
}
-- 
Claude Marinier, Information Technology Group claude.marinier@dreo.dnd.ca
Defence Research Establishment Ottawa (DREO) (613) 998-4901 FAX 998-2675
3701 Carling Avenue, Ottawa, Ontario K1A 0Z4 http://www.dreo.dnd.ca

AltStyle によって変換されたページ (->オリジナル) /