1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C: problemas de memória

Discussão em 'Programação' iniciada por FrOidE, 15 de Abril de 2004. (Respostas: 5; Visualizações: 1113)

  1. FrOidE

    FrOidE Power Member

    viva,

    Estou aqui com um problema, para o qual não estou a ver solução. O código q se apresenta de seguida é um excerto de um programa consideravelmente maior, motivo pelo qual não o ponho aqui.

    A função em questão funciona bem durante a 1ª iteração do while, escolho a opção 0, que vai chamar uma outra função, quendo essa função acaba e o while volta a correr, por debug descobri que dá erro de gestão de memória, pelo que percebi do debug algo se passa com a estrutura equipa, "cannot be evaluated", sinseramente n tou a ver o q passa, já exp passar por referencia mas saltan-me logo resmas de warnigs. No fim do programa seguem os cabeçalhos das funções em questão e a estrutura equipa.


    void ScreenVerJogo(Equipa * equipa, Grupo * grupo, int index_grp, int index_jg)
    {
    char string[50]="";
    Menu Mjogo=BuildMenu(); // inicia a variavel a zeros
    int choice=0,sair=0;

    while (sair !=1)
    {

    ClearScreen();
    Mjogo=BuildMenu();

    strcpy(string,"");
    strcat(string,equipa[grupo[index_grp].jogo[index_jg].num_equipa1-1].nome);
    strcat(string," VS ");
    strcat(string,equipa[grupo[index_grp].jogo[index_jg].num_equipa2-1].nome);

    HeaderData(string); // cabecalho construido c strcat's

    switch (choice=MenuShow(&Mjogo,LINE+5,COL+2,35))
    {
    case -1:

    sair=1;
    break;

    case 0:
    ScreenInserirResultadoJogo(equipa,grupo, index_grp, index_jg);
    break;

    }
    }
    }



    typedef struct {
    int numero;
    char nome[30];
    Jogador jogador[22];
    int pontos;
    int golos_marc;
    int golos_sof;
    char nome_treinador[50];
    }Equipa;


    void ScreenVerJogo(Equipa * equipa, Grupo * grupo, int index_grp, int index_jg);
    void ScreenInserirResultadoJogo(Equipa * equipa, Grupo * grupo, int index_grp, int index_jg);
     
  2. SoundSurfer

    SoundSurfer Power Member

    Talvez o problema é aquela "string".

    Faz antes um malloc.

    E usa o GDB ;)
     
  3. FrOidE

    FrOidE Power Member

    a string não tem problema, pq defino o tamanho dela, pelo debuger csg ver que ela toma os valores todos correctos, mm assim vou exp. embora ache q o problema paire na "equipa", mas tb n o csg resolver...
     
  4. Tafinho

    Tafinho Power Member

    De facto aquela string está pouco católica....

    Em vez de strcpy(string,"") faz bzero(string,sizeof(string)) ou algo do genero.
    Tirando isso não tou a ver assim à partida o que possa ser, até porque não estou a ver o programa todo e pode ser simplesmente um ponteiro maluco de qq outra função que ande a fazer estragos...
     
  5. FrOidE

    FrOidE Power Member

    bzero ????? ANSI ???
     
  6. Tafinho

    Tafinho Power Member

    man bzero ou man memset
     

Partilhar esta Página