Jump to content
Fórum Script Brasil
  • 0

matriz n por m em C com ponteiros


tiziu

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...