Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

malloc não está funcionando

Olá pessoal,

tenho o seguinte código que é semelhante ao do vídeo porem não funciona ... :

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

char** mapa;
int linhas;
int colunas;

int main(){

    FILE* f;
    f = fopen("FogeFoge.txt", "r");
    if (f == 0){
        printf("Erro na abertura do mapa ...");
        exit(1);
    }

    fscanf(f, "%d %d", &linhas, &colunas);
    printf("linhas %d e colunas %d\n", linhas, colunas);

    mapa = malloc(sizeof(char*) * linhas);
    for(int i = 0; i < linhas; i++) {
          mapa[i] = malloc(sizeof(char) * (colunas + 1));
    }

    for (int i = 0; i <= 4; i++){
        printf("%s\n", mapa[i]);
    }

    fclose(f);

    for (int i = 0; i < linhas; i++){
        free(mapa[i]);
    }
    free(mapa);    

}

porem eu tento compilar e tenho o seguinte erro:

linha 21,  coluna 38 [Error] invalid conversion from 'void*' to 'char**' [-fpermissive]
mapa = malloc(sizeof(char*) * linhas);
linha 24, coluna 50 [Error] invalid conversion from 'void*' to 'char*' [-fpermissive]
mapa[i] = malloc(sizeof(char) * (colunas + 1));

E já aproveitando gostaria de saber o porque que o char dentro do for não possui * , ou seja, char* .

Obrigado a todos,

desde já agradeço.

2 respostas

Oi João,

Rodei aqui o seu código e compilou normalmente. Dá uma olhada se seu arquivo de texto não tem nenhum caractere estranho.

Vi também que no seu código faltava ler as informações do arquivo para popular no mapa:

    for (int i = 0; i <= 4; i++){
        fscanf(f, "%s", mapa[i]);
    }

O código completo fica assim:

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

char** mapa;
int linhas;
int colunas;

int main(){

    FILE* f;
    f = fopen("mapa.txt", "r");
    if (f == 0){
        printf("Erro na abertura do mapa ...");
        exit(1);
    }

    fscanf(f, "%d %d", &linhas, &colunas);
    printf("linhas %d e colunas %d\n", linhas, colunas);

    mapa = malloc(sizeof(char*) * linhas);
    for(int i = 0; i < linhas; i++) {
          mapa[i] = malloc(sizeof(char) * colunas + 1);
    }

    for (int i = 0; i <= 4; i++){
        fscanf(f, "%s", mapa[i]);
    }

    for(int i = 0; i < linhas; i++) {
        printf("%s\n", mapa[i]);
    }

    fclose(f);

    for (int i = 0; i < linhas; i++){
        free(mapa[i]);
    }
    free(mapa);    
}

Coloca também o comando que você está usando para compilar.

Abraço!

solução!

Oi bom dia,

Então descobri o erro, estava no formato do arquivo, que estava sendo salvo em .ccp, mudei para .c, e funcionou normalmente, só tive de colocar para std = c99.

Obrigado, até mais.