Jump to content

Problema em alocação de memória


trippietiago

Recommended Posts

Olá a todos, sou iniciante em programação e foi me pedido para a faculdade a construção de um projeto em que envolva um campeonato com 18 equipas, cada equipa com o seu número de jogadores e membros da equipa técnica e as funções pedidas estão relacionadas com a alocação de memoria das equipas, dos jogadores e dos membros. Já fiz a maior parte do trabalho no entanto quando passo do 1o menu, recebo um erro "Run Failed exit value 1" e sem receber erros no codigo em si. Aqui em baixo está um excerto do trabalho, alguém consegue ajudar-me ? 

 

#define MAX_INT 30
#define TAM_INICIAL 1
#define TAM_INCREMENTO 3
#define N_EQUIPAS 18
#ifdef __cplusplus
extern "C" {
#endif

    typedef struct Jogadores {
        char nome[MAX_STR];
        int nc; //numero da camisola
        int idade;
        int durContrato;
        int altura;
        int peso;
        int dispTransf; // 1 - disponivel, 2 - indisp 
        int cartoes; //4 amarelos - ind. prox jogo
        int dispJogo; //1 - lesionado, 2 - indisp
    } JOGADOR;

    typedef struct EquipasTecnicas {
        char cargo[MAX_STR];
        int salario;
    } EQTEC;

    typedef struct Clubes {
        char nomeDiretor[MAX_STR];
        char nome[MAX_STR];
        int idclube;
        int realizado; //1 se já se realizou / 0 se ainda n se realizou
        int pontuacao;
        int capital;
        int ngm, ngs; //n golos marcados / n golos sofridos
        JOGADOR jogador[MAX_INT];
        EQTEC eqtec[MAX_INT];
    } CLUBE;

    typedef struct Jogos {
        int dia, mes, ano;
        int resultadoEqCasa, resultadoEqFora;
        int nadeptos;
        CLUBE *c1, *c2;
        int pbilhete; //preço medio dos bilhetes
    } JOGO;
    
    typedef struct Ligas {
        CLUBE clube[18];
        JOGO *jogo;
    } LIGA;



/**
 * Aloca inicialmente a memória necessária para as equipas inseridas na liga  
 * 
 * @param clube apontador duplo para o array de clubes 
 * @param tam_max apontador para o tamanho máximo de clubes
 * return 1 em caso de sucesso, 0 caso contrário
 */
int alocaEquipas(CLUBE **clube, int *tam_max) {
    int res = 1;

    *clube = (CLUBE *) malloc(N_EQUIPAS * sizeof (CLUBE));

    if (*clube == NULL) {
        printf("Erro ao alocar memória.\n");
        res = 0;
    } else {
        *tam_max = TAM_INICIAL;
    }
    return res;
} //erro RUN FAILED 

/**
 * Adiciona um clube à liga, se esta não estiver já cheia
 * 
 * @param liga apontador para a liga
 * @param quantos apontador para o número atual de equipas inscritas na liga
 */
void adicionaEquipa(LIGA *liga, int *quantos) {
    LIGA *novo;
    int idclube, pos;

    readInt(&idclube, 1, 18, "Digite o ID do clube: ");
    pos = pesquisaEquipa(liga, *quantos, idclube);

    if (pos == -1) {
        if (*quantos == N_EQUIPAS) {
            printf("Limite de clubes inscritos na liga atingido.\n");
        } else {
            leEquipa(liga, quantos, idclube);
        }
    } else {
        printf("ID de clube já existente.\n");
    }
}

void leEquipa(LIGA *liga, int *pos, int idclube) {
    liga->clube[*pos].idclube = idclube;
    readString(liga->clube[*pos].nome, (MAX_STR - 1), "Nome da equipa: ");
    liga->clube[*pos].pontuacao = 0;
    (*pos)++;
}

int pesquisaEquipa(LIGA *liga, int quantos, int idclube) {
    int i = 0;
    while (i < quantos && (*liga).clube[i].idclube != idclube) {
        i++;
    }
    if (i == quantos) {
        return -1;
    } else {
        return i;
    }
}
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.