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

O codigo não compila quando coloca a função malloc :\

Estou usando o dev c++, na versão mais recente Esse é o codigo:

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

// Variaveis Gloabais
char mapa[5] [11];
int linhas;
int colunas;

int main() {


    FILE* fmapa;
    fmapa = fopen("mapa.txt", "r");
    if(fmapa == 0) {
        printf("Ops! Erro na leitura do mapa...\n");
        system("pause");
        exit(1);
    }

    fscanf(fmapa, "%d %d", &linhas, &colunas);
    printf("Linhas %d\nColunas %d\n\n", linhas, colunas);

    ////////
    int* v = malloc(sizeof(int) * 50);
    v[0] = 10;
    v[1] = 12;
    printf("inteiro alocado %d %d\n", v[0], v1);
    free(v);
    ////////

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

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

    fclose(fmapa);

}

O problema tá no uso da função, mas não sei como resolver.... Atualizei o compilador mas mesmo assim não resolveu,

2 respostas
solução!

Olá Everton,

A função malloc devolve um ponteiro para void e no C++ somos obrigados a converter esse ponteiro para o tipo que queremos fazendo um casting. A instrução ficaria assim:

int* v = (int*) malloc(sizeof(int) * 50);

Perceba a instrução (int*)logo antes do malloc. Ali estamos avisando pro compilador que queremos converter o ponteiro de void para int.

A linguagem C é menos rigorosa e consegue fazer esse casting de forma implícita mas no C++ a forma mais indicada de fazer essa alocação é utilizando o operador new como no exemplo abaixo:

int* v = new int[50];

Essa instrução é equivalente a que você escreveu em C.

Um outro detalhe, na linha do printf("inteiro alocado") tem uma referência pra variável v1 mas acredito que você queria ter escrito v[1].

Muito obrigado, funcionou agora!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software