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

matriz n por m em C com ponteiros


tiziu

Pergunta

Olá, estou com um problema que talvez possam me ajudar. Fiz dois programas em C (prg1 e prg2). Em ambos, crio um array de tamanho (Nlinhas*Mcolunas) e dois ponteiros. O tamanho do array (linhas e colunas) é definido durante a execução dos programas. O pr1 funcionou Ok. Mas o prg2 apresentou problema "erro de paginação". Alguém sabe por quê? A única diferença é que no prg2 eu defini uma estrutura.

---> prg1:

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

#define ROW_SIZE 5;
#define COL_SIZE 3;

int main(void){
    int nrows=ROW_SIZE;
    int ncols=COL_SIZE;
    int i,j;
    unsigned char *pixel_array;
    unsigned char **row_index;

    pixel_array=malloc(nrows*ncols*sizeof(unsigned char));
        row_index=malloc(nrows*sizeof(unsigned char));
        for(i=0;i<nrows;i++)
             row_index[i]=pixel_array+i*ncols;
        for(i=0;i<nrows;i++)
        for(j=0;j<ncols;j++)
            row_index[i][j]=0;
        printf("\n");
        for(i=0;i<nrows;i++){
           for(j=0;j<ncols;j++){
            printf("%d",row_index[i][j]);
        }
        printf("\n");
    }
    return EXIT_SUCCESS;
}

---> prg2:

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

typedef struct{
    unsigned int nrows;
    unsigned int ncols;
    unsigned char *buffer;
    unsigned char **pixel;
}pixel_array_t;

#define ROW_SIZE 3;
#define COL_SIZE 2;

int main(void){
    pixel_array_t x;
    int i,j;

    x.nrows=ROW_SIZE;
    x.ncols=COL_SIZE;

    x.buffer=malloc(x.nrows*x.ncols*sizeof(unsigned char));
    x.pixel=malloc(x.nrows*sizeof(unsigned char));
    for(i=0;i<x.nrows;i++)
            x.pixel[i]=x.buffer+i*x.ncols;
    for(i=0;i<x.nrows;i++)
            for(j=0;j<x.ncols;j++)
                x.pixel[i][j]=0;

    for(i=0;i<x.nrows;i++){
        for(j=0;x.ncols;j++){
            printf("%d",x.pixel[i][j]);
        }
        printf("\n");
    }
    return EXIT_SUCCESS;
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

O ultimo for do prg 2 deveria ser:

for(j=0;j<x.ncols;j++){

Ou seja, do jeito que tá lá, é um laço infinito que fica dando dump da memoria até gerar um endereçamento inválido.

Testa ai e vê se resolve seu problema.

Abs

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...