Jump to content
Fórum Script Brasil
  • 0

Ajuda com ponteiro e matriz


DiegoMB

Question

Olá a todos.

Gostaria de pedir para alguém me ajudar a corrigir esse código, pois fiz mais não estou conseguindo corrigir o erro que está dando.

erro gerado pelo programa: segmentation fault (core dumped).

Não sei o que estou fazendo de errado mais creio que seja minha linha que tem "matriz = aloca(m,n)"

O programa esta sendo desenvolvimento no

codeblock 13.12

linux xubuntu

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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

/*
2- Construa uma função que receba dois parâmetros m e n,
aloque uma matriz de ordem m x n e retorne um ponteiro para
a matriz alocada em tempo de execução. Crie ainda outra
função que receba por parâmetro um ponteiro para matriz e
libere a área de memória alocada. Finalmente, crie um
programa (main) que teste/use as duas funções criadas.
*/

int *aloca(int m, int n);
void liberaEspaco(int **p);

int main(){

setlocale(LC_ALL,"portuguese");

int i=0,j=0,m,n, **matriz;

printf("Informe o número de linhas que deseja em sua matriz:");
scanf("%d",&m);
printf("Informe o número de colunas que deseja em sua matriz:");
scanf("%d",&n);

matriz = aloca(m,n);



for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("Matriz[%d][%d]:",i,j);
scanf("%d",&matriz[j]);
}
}

liberaEspaco(matriz);


system("pause");
return 0;
}

int *aloca(int m, int n){
int *p;
p=(int*)malloc(m*n*sizeof(int));
}

void liberaEspaco(int **p){
free(p);
}


Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0
#include<stdlib.h>
#include<stdio.h>
#include<locale.h>

int** aloca ( int LINHAS, int COLUNAS );
void liberaEspaco ( int** matriz, int LINHAS );

int main() {

    setlocale ( LC_ALL, "portuguese" );
    
    int i = 0, j = 0, m, n;
    
    printf ( "Informe o número de linhas que deseja em sua matriz:" );
    scanf ( "%d", &m );
    printf ( "Informe o número de colunas que deseja em sua matriz:" );
    scanf ( "%d", &n );
    
    int** matriz = aloca ( /*linhas*/m, /*por colunas*/n );
    
    for ( i = 0; i < m; i++ ) {
        for ( j = 0; j < n; j++ ) {
            printf ( "Matriz[%d][%d]:", i, j );
            scanf ( "%d", &matriz[i][j] );
        }
    }
    
    printf("\n");
    for ( i = 0; i < m; i++ ) {
        for ( j = 0; j < n; j++ ) {
            printf ( "M[%d][%d]= %d\n", i, j, matriz[i][j] );
        }
        printf("\n");
    }
    liberaEspaco ( matriz, /*linhas*/m );
    
    
    system ( "pause" );
    return 0;
}

int** aloca ( int LINHAS, int COLUNAS ) {
    int i;
    int** matriz = ( int** ) malloc ( LINHAS*sizeof(int) );
    for (i=0;i<LINHAS;i++){
        matriz[i] = (int*) malloc (COLUNAS*sizeof(int));
    }
    return matriz; 
}

void liberaEspaco ( int** matriz, int LINHAS ) {
    int i;
    for (i=0;i<LINHAS;i++){
        free ( matriz[i] );
    }
    free(matriz);
}
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...