Problemas com ponteiros/scanf em C

Problemas com ponteiros/scanf em C

por Gabriel Pugliese -
Número de respostas: 4
Galera, to com um pobrema aqui em C. Será que alguém consegue solucionar ?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define AERO 3 /* Numero de texto */

/* Aloca matrix linhas x colunas */
int **alocaMatriz(int linhas, int colunas)
{
int i,j;
int **matriz;

matriz = (int **) malloc((linhas) * sizeof(int *));
if (matriz == NULL) {
printf("Erro de memoria/alocacao\n");
exit(1) ;
}
for (i = 0; i < linhas; i++) {
matriz[i] = (int *) malloc((colunas) * sizeof(int));
if (matriz[i] == NULL) {
printf("Erro de memoria/alocacao\n");
exit(1);
}
for(j = 0; j < colunas; j++) matriz[i][j] = 0;
}
return matriz;
}

void imprimeTabela(int **tabela)
{
int i, j;

for (i = 0; i < AERO; i++) {
for (j = 0; j < AERO; j++) {
printf("%d", tabela[i][j]);
}
printf("\n");
}
}

/* Pega o arquivo aeroportos.txt, joga as distancias entre os aeroportos na tabela e inicializa a lista de decolagem e as pistas */
void listaAeroportos(int **tabela)
{
FILE *texto;
int i,j;
char sigla[3];

texto = fopen("aeroportos.txt", "r");
if (!texto)
exit(1);
for (i = 0; i < AERO; i++) {
fscanf(texto, "%s", sigla);
for(j = 0; j < AERO; j++) fscanf(texto, "%d", &tabela[i][j]);
}

imprimeTabela(tabela);
fclose(texto);
}



Tenho esse código aí, lindo, bunito e tudo +.

Agora a main:
int main(int argc, char *argv[])
{
int **tabela;

tabela = alocaMatriz(AERO, AERO);
imprimeTabela(tabela);
listaAeroportos(tabela);
return 0;
}



Funciona e sai do programa que rapidim. Imprime a tabela que aloquei e inicializei tudo com 0 e blz.Agora, se eu adiciono essa linha:

int main(int argc, char *argv[])
{
int **tabela;

tabela = alocaMatriz(AERO, AERO);
imprimeTabela(tabela);
listaAeroportos(tabela);
imprimeTabela(tabela);
return 0;
}



O que eu quero com essa linha: Imprimir a tabela depois que peguei do fscanf na função listaAeroportos(tabela).
Isso dá SegFault triste Qualquer operação que eu faço com a tabela depois de sair da função listaAeroportos(tabela), dá SegFault. Se eu colocar tabela[0][0] = 1, dá SegFault.

Alguém tem uma luz ? triste

Em resposta à Gabriel Pugliese

Re: Problemas com ponteiros/scanf em C

por Felipe Torres -
Será que não é seu arquivo ".txt" que está com problemas?
Em resposta à Felipe Torres

Re: Problemas com ponteiros/scanf em C

por Gabriel Pugliese -
Num é, já refiz.
Preste atenção que antes de sair da função eu chamo o imprimeTabela(), que funciona. Depois que saio da função, não funciona +.
Em resposta à Gabriel Pugliese

Re: Problemas com ponteiros/scanf em C

por Alex Morinaga -
Como é seu arquivo de entrada? Consegui dar segfault qdo a entrada quebra o "char sigla" (ex: ABC 1 2 3).
Edit: Vi sua entrada no outro tópico. Coloca tamanho da sigla 4 q para de dar segfault. Isso acontece pq precisa de 1 espaço pro '\0'.