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