Ciao a tutti,
voglio creare una griglia editabile inserendo numero di righe e colonne a scelta dell'utente, ma succede questo:
- se inserisco un numero di righe pari a 1 o 2 il programma funziona correttamente
- se inserisco un numero > 3 il processo va in crash restituendo return value 3221225725 che mi sono informato essere uno stack overflow.
Mi sto scervellando da giorni ma non riesco a trovare una quadra, posto il codice sperando possiate darmi una dritta
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define dim 10
#define P1_num_navi 4
#define P2_num_navi 4
int **grigliaP1;
int **grigliaP2;
int i,j,t,a;//variabili globali
int righe, colonne, r, c,contnum_naviP1;//variabili P1
int righex,colonnex,rx,cx,contnum_naviP2; //variabiliP2
void InizializzaGrigliaP1()
{
grigliaP1 = (int **) malloc (righe*sizeof(int*));
for(r=0; r<righe; r++)
grigliaP1[r] = (int *) malloc(righe*sizeof(int*));
}
void InizializzaGrigliaP2()
{
grigliaP2 = (int **) malloc (righex*sizeof(int *));
for(rx=0; rx<righex; rx++)
grigliaP2[rx] = (int *) malloc(colonnex*sizeof(int));
}
main()
{
InizializzaGrigliaP1();
InizializzaGrigliaP2();
//Definizione campo
int num_navip1;
int contnum_navip1 = 0;
printf("Preparazione campo... \n\n");
printf(" righe");
scanf("%d %d", &righe, &righex);
printf("\n");
printf("colonne");
scanf("%d %d", &colonne,&colonnex);
printf("\n");
do{
printf("P1: Inserisci una nave \n 0: posto libero \n 1: collocare la nave \n");
for(r=0; r<righe; r++)
{
for(c=0; c<colonne; c++)
{
printf("Inserisci elemento di riga %d e colonna %d: ",r,c);
scanf("%d",&grigliaP1[r][c]);
if (grigliaP1[r][c]==1)
{
printf("nave inserita!\n");
contnum_naviP1++;
printf("restano da inserire %d navi!\n", P1_num_navi-contnum_naviP1);
}
}
}
}
while(1);
system("pause");
}
[\code]