Ir ao conteúdo
  • Cadastre-se

C Dificuldade em tratar erro em C


Lipeco

Posts recomendados

Coloque aqui --- onde pode ajudar outros --- a descrição do problema e o código, usando o tal botão code como explicado no primeiro post do forum.

 

Postar um arquivo compactado como zip seria uma opção para contratar consultoria, não para um forum público. Claro, minha opinião não representa a do forum...

 

Afinal tudo o que se sabe é um título genérico. Sequer cita o erro.

 

 

  • Curtir 3
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Lipeco Eu recomendo você começar fazendo tudo no arquivo principal, pra só depois migrar o código para um arquivo externo.

 

exemplo

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

typedef struct icone {
    short int **pixels; // matriz representando imagem do ícone
    int tamanho; // número de linhas e colunas da matriz da imagem
}Icone;

Icone * icone_cria(int tam);

void icone_imprime(Icone *ic);

int main(void)
{
    Icone *p = icone_cria(10);
    if (p == NULL) {
        perror("Erro não foi possível reservar memoria");
        exit(EXIT_FAILURE);
    }
    
    p->pixels[0][0] = 0;
    icone_imprime(p);
    return 0;
}

Icone *icone_cria(int tam)
{
    int linhas, colunas;
    Icone *objeto = malloc(sizeof(Icone));
    
    if (objeto != NULL) {
        /* Cria as linhas */
        objeto->pixels = malloc(sizeof(short int*)*tam);
        if (objeto->pixels != NULL) {
            /* Cria as colunas */
            for (linhas = 0; linhas < tam; linhas++) {
                objeto->pixels[linhas] = malloc(sizeof(short int)*tam);
                if (objeto->pixels[linhas] == NULL) {
                    free(objeto->pixels);
                    free(objeto);
                    return(NULL);
                }
            }
            /* Limpa os ponteiros */
            for (linhas = 0; linhas < tam; linhas++) {
                for (colunas = 0; colunas < tam; colunas++) {
                    objeto->pixels[linhas][colunas] = 1;
                }
            }
            objeto->tamanho = tam;
            return(objeto);
        } else {
            free(objeto);
        }
    }
    
    return(NULL);
}

void
icone_imprime(Icone *ic)
{
    int linhas, colunas;

    for(linhas=0; linhas < ic->tamanho; linhas++)
    {
        for(colunas=0; colunas < ic->tamanho; colunas++)
        {
            if (ic->pixels[linhas][colunas] == 1) {
                printf(" ");
            } else {
                printf("@");
            }
        }
        printf("\n");
    }
}

dessa maneira fica mais simples de testar.

 

De nomes mais significativos para as variáveis.

se você conseguir adicione essa flag de compilação no codeblocks para identificar vazamentos de memoria mais rapidamente

-fsanitize=address

 

Se você poder fazer tudo com um bloco só de memoria fica mais fácil de procurar por erros

exemplo

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...