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