Errore Programma C- file ended with the exit code 139

di il
3 risposte

Errore Programma C- file ended with the exit code 139

Salve a tutti,
mi serve un programma che mi genera una matrice i cui elementi sono o + 1 oppure -1 (in maniera casuale). Il programma mi funziona per matrici fino a 4x4 ma da n=5 in poi mi va in segmentation fault. Qualcuno può aiutarmi? Il programma è il seguente

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int generatore(void){
	int x;
	x=rand()%101;
	if(x>50){
		x=1;
	}
	else{
		x=-1;
	}
	
return x;
}


int main(){
	
	int i, j, n;
	srand(time(NULL));
	printf("Inserire dimensione matrice\n");
	scanf("%d", &n);
	int **a;
	a=(int**)calloc(n, sizeof(int));
	for(i=0;i<n;i++){
		a[i]=(int*)calloc(n, sizeof(int));
	}
	for(i=0; i<n; i++){
		for(j=0;j<n; j++){
			a[i][j]=generatore();
		}
	}
	//STAMPA A SCHERMO
	
 	for(i=0;i<n;i++){
 		printf("\n");
 		for(j=0;j<n;j++){
 			printf("%d\t", a[i][j]);
 			
		 }
	 }
	
	
	
	return 0;
}



Grazie dell'aiuto.

3 Risposte

  • Re: Errore Programma C- file ended with the exit code 139

    La prima calloc deve usare sizeof(int *)
  • Re: Errore Programma C- file ended with the exit code 139

    oregon ha scritto:


    La prima calloc deve usare sizeof(int *)
    Grazie mille, è andato.
  • Re: Errore Programma C- file ended with the exit code 139

    Qualche appunto sulla funzione generatore():
    - l'operazione rand()%101 ritorna un valore compreso tra 0 e 100, per un totale quindi di 101 valori diversi. Il problema è che 101 non è divisibile per 2, quindi non potrai mai ottenere una probabilità del 50%... infatti nel tuo caso la probabilità di ritornare -1 è 51/101, mentre la probabilità di ritornare 1 è 50/100;
    - il tutto poteva fatto semplicemente valutando il risultato dell'operazione rand()%2, se esso è uguale a 0 ritorni -1, altrimenti ritorni 1.
    Ti invito inoltre a ragionare sulla seguente espressione 1-2*(rand()%2).
Devi accedere o registrarti per scrivere nel forum
3 risposte