Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Segmentation Faul!


D4n1l0d

Pergunta

Olá!

Estou criando um simples joguinho de batalha naval e como estou aprendendo c++ decidi criar uma classe para o mapa do jogo

ainda estou no começo, na alocação dinamica, entretanto eu pego um erro de segmentation fault ( usando ubuntu 9.xx)

observem o codigo e onde ocorre o erro ( descoberto debuggando)

typedef struct
{
   char x;
   char y;

} bn_sdot;

class bn_mapa
{

    protected:
     int lin;
     int col;


    public:
     bn_mapa();

     int getLin();
     int getCol();

     void drawmask();

     FILE *arquivo;
     char **mapa;
     char **mascara;
     bn_sdot ponteiro;

};
// Construtor padrão, constroi um mapa de 10x15
bn_mapa::bn_mapa()
{
     lin = 10;
     col = 15;
     mapa = (char **) memaloc(lin,col);
     mascara = (char **) memaloc(lin,col);
     erasememory( mapa[0],0,lin,col); //o erro ocorre aqui, mas de acordo com o disassembler, antes de chamar a funcao
     erasememory( mascara[0],'~',lin,col);
}

char **memaloc(int lin, int col)
{

    int i;
    char *tmp;
    char **mtmp;
    mtmp = (char **) malloc(sizeof(char *)*lin);

    tmp = (char *) malloc(sizeof(char)*lin*col);

   for(i=0;i<lin;i++)
   mtmp[i] = tmp + i*col;
}

void erasememory(char *area, char character, int lin, int col)
{
 memset(area,character,col*lin);
}

se voces souberem um jeito mais facil pra que eu possa alocar arrays de tamanho dinamico, eu ficaria muito feliz!

agradeço desde já

[]'s

Danilo Rodrigues

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

aff

erro ridículo

na rotina de alocação dinamica esqueci de retornar o **char

char **memaloc(int lin, int col)
{

    int i;
    char *tmp;
    char **mtmp;
    mtmp = (char **) malloc(sizeof(char *)*lin);

    tmp = (char *) malloc(sizeof(char)*lin*col);

   for(i=0;i<lin;i++)
   mtmp[i] = tmp + i*col;

return mtmp;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Acontece.

De qualquer forma, você tem mesmo que alocar a memória dinamicamente? Na batalha naval, o mapa não possui um tamanho estático?

Não esqueça que você também pode usar templates para especificar o tamanho, e aí utilizar a stack.

Recomendo o uso da stack para diminuir as chances de memory leak e segmentation fault's.

Na função memaloc você está desalocando a memória da variável "tmp"? Se não, você tem um memory leak.

Abraços.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...