I am creating a program that simulates a minefield, and option number 1 should pick up a matrix (containing points (where it has no pump) and asterisks (where it has a bomb) from a computer file and copy it to a array that I'm dynamically allocating to the read function.
I'm having a segmentation fault problem and I can not detect the error, I'd be grateful for the help, here's the code below:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char** leitura(char* nome)//Declaracao de funcao que aloca a matriz
{
FILE* ponteiro;
int i = 0,j = 1, k ,l;
char** campo = NULL;
char carac;
ponteiro = fopen("nome", "w");
while(!feof(ponteiro))
{
i++;
campo = (char**) realloc(campo, i * sizeof(char*));
while(fscanf(ponteiro, "%c", &carac) != '\n')
{
campo[j - 1] = (char*) realloc(campo[j - 1], j * sizeof(char));
campo[i - 1][j - 1] = carac;
j++;
}
}
for(k = 0; k < i; k++)
{
for(l = 0; l < j; l++)
{
printf("%c", campo[i][j]);
}
printf("\n");
}
fclose(ponteiro);
return campo; //Retorno da matriz alocada dinamicamente
}
int main (void)
{
int tamanho = 0, linha = 0, coluna = 0;
char* nome = NULL;
char** retornoCampo = NULL;
size_t tam;
getline(&nome, &tam, stdin); //Funcao para adquirir o nome do arquivo
int i, j;
nome[strlen(nome) - 1] = '#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char** leitura(char* nome)//Declaracao de funcao que aloca a matriz
{
FILE* ponteiro;
int i = 0,j = 1, k ,l;
char** campo = NULL;
char carac;
ponteiro = fopen("nome", "w");
while(!feof(ponteiro))
{
i++;
campo = (char**) realloc(campo, i * sizeof(char*));
while(fscanf(ponteiro, "%c", &carac) != '\n')
{
campo[j - 1] = (char*) realloc(campo[j - 1], j * sizeof(char));
campo[i - 1][j - 1] = carac;
j++;
}
}
for(k = 0; k < i; k++)
{
for(l = 0; l < j; l++)
{
printf("%c", campo[i][j]);
}
printf("\n");
}
fclose(ponteiro);
return campo; //Retorno da matriz alocada dinamicamente
}
int main (void)
{
int tamanho = 0, linha = 0, coluna = 0;
char* nome = NULL;
char** retornoCampo = NULL;
size_t tam;
getline(&nome, &tam, stdin); //Funcao para adquirir o nome do arquivo
int i, j;
nome[strlen(nome) - 1] = '%pre%';
int opcao = 0;
scanf("%d", &opcao);
switch(opcao) //Opcoes a serem escolhidas
{
case 1: //Leitura
retornoCampo = leitura(nome);
break;
case 2: //Inicializacao do tabuleiro
break;
case 3: //Acao do usuario
break;
}
return 0;
}
';
int opcao = 0;
scanf("%d", &opcao);
switch(opcao) //Opcoes a serem escolhidas
{
case 1: //Leitura
retornoCampo = leitura(nome);
break;
case 2: //Inicializacao do tabuleiro
break;
case 3: //Acao do usuario
break;
}
return 0;
}