Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Ivan Santos_607246

Problema de alocacao de memoria em c

Recommended Posts

Galera estou com um problema numa funcao que faz a leitura de uma imagem ppm.... O erro provavelmente esta na hora da alocacao de memoria. Alguem sabe com consertar isso? 

#include <stdio.h>
#include <stdlib.h>
 
 
typedef struct _cor { //Essa struct é onde vão ficar armazenados os indices de cor da matriz.
    int val[3];         //0 = Vermelho
} Cor;                  //1 = Verde
                        //2 = Azul
 
typedef struct _colorimage {
    int nx,ny; /* dimensoes da imagem */
    Cor **cor; /* matriz com a cor dos pixels */
    int tamanho_maximo; // ate onde vai a intensidade dos pixels
    char cabecalho[2]; //cabecalho que vem em TODAS as imagens ppm... para ver isso é só abrir a imagem com um bloco de notas
} ColorImage;
 
 
ColorImage Leitura(char*Nome_Da_Imagem) { //Essa funcao vai fazer a leitura de uma imagem... lembra que a imagem é uma matriz
 
FILE *img; //ponteiro pro arquivo
   int i,j;
   int linhas,colunas,max;//variaveis auxiliares para guardar os dados
   ColorImage ppm; // "objeto" que vai apontar pra matriz que vai guardar os dados da imagem
   img = fopen(Nome_Da_Imagem,"r"); //abre a imagem
   if(img == NULL){
       printf("Erro ao abrir imagem\n");
       exit(0);
   }
   fscanf(img,"%s %d%d%d",ppm.cabecalho,&linhas, &colunas, &max); //aqui é onde é feita a leitura dos dados inciais da imagem(As primeiras 4 linhas)
   ppm.nx = colunas; //guarda a informação das colunas DENTRO da variável das matrizes
   ppm.ny = linhas;  //mesma coisa, porém com as linhas
   ppm.tamanho_maximo = max; //intensidade máxima dos pixels (na maioria dos casos é até 255)
 
   ppm.cor = (Cor**)malloc(sizeof(Cor*)* colunas); //alocação dinâmica para a matriz das cores (bidimensional até o momento)
   i=0;
   while(i<linhas){
       ppm.cor = (Cor*)malloc(sizeof(Cor) * colunas); //alocação
       i++;
   }
   printf("Errooooo2\n");
   int k;
   for(i=0;i<linhas;i++){         //aqui é o pulo do gato... uuma imagem RGB é uma matriz tridimensional, onde apenas UM pixel da imagem é formado por 3 tons diferentes(RED, GREEN, BLUE)
       for(j=0;j<colunas;j++){     //tenta sacar esse loop.... lembra daquela struct de índices lá em cima, que armazena os valores "0,1,2"
           for(k=0;k<3;k++){
               fscanf(img,"%d",&ppm.cor[j].val[k]); //se entender isso aqui entendeu tudo
           }
       }
   }
   fclose(img);
   return ppm;
}
int main()
{
     ColorImage ImagemBase;
    char nome_do_arquivo_entrada[500];
 
    printf("Insira o endereco da imagem: ");
    scanf("%s", nome_do_arquivo_entrada);
 
    printf("\n");
    ImagemBase = Leitura(nome_do_arquivo_entrada);
}
 
 

Compartilhar este post


Link para o post
Compartilhar em outros sites


#include <stdio.h>

#include <stdlib.h>

typedef struct _cor {

int val[3];

} Cor;

typedef struct _colorimage {

Cor **cor;

char tipo[3]; // 2+nulo SEMPER!!!

int colunas;

int linhas;

int maxNumberColorColor;

} ColorImage;

ColorImage cargarImagem(char nome[100]){

int i, j;

FILE *arquivo = fopen ( nome, "r" );

if ( arquivo == 0 ) { perror ( "Erro: " ); getchar(); exit(EXIT_FAILURE); }

ColorImage imagem;

fscanf(arquivo, "%s%d%d%d%*c", imagem.tipo, &imagem.colunas, &imagem.linhas, &imagem.maxNumberColorColor);

size_t TAM = ( sizeof ( Cor ) * imagem.colunas ) * imagem.linhas;

imagem.cor = ( Cor** ) malloc ( TAM );

for ( i = 0; i < imagem.linhas; i++ ){

for ( j = 0; j < imagem.colunas; j++ )

fscanf ( arquivo, "%d%d%d",

&imagem.cor[j].val[0],

&imagem.cor[j].val[1],

&imagem.cor[j].val[2]

);

}

fclose ( arquivo );

return imagem;

}

int main() {

int i, x, z;

ColorImage imagem = cargarImagem("prova.ppm");

printf("%s \n%d %d \n%d\n", imagem.tipo, imagem.colunas, imagem.linhas, imagem.maxNumberColorColor);

for ( i = 0; i < imagem.linhas; i++ ){

for ( x = 0; x < imagem.colunas; x++ ){

for ( z = 0; z < imagem.colunas; z++ ){

printf("%.3d ", imagem.cor[x].val[z]);

}

printf(" ");

}

printf("\n");

}

//Liberar muito importante

for ( i = 0; i < imagem.linhas; i++ ) {

free ( imagem.cor );

}

free ( imagem.cor );

getchar();

return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×