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

Não consigo imprimir, na função main, valores provenientes de um vetor criado em outra função


Edwar Saliba Jr.

Pergunta

Boa tarde Senhores(as)!

O código-fonte a seguir é a miniaturização de um problema maior no qual estou trabalhando.

Preciso imprimir os valores do vetor gerado pela função "fazVetor", na função "main".

Porém, para que o código se assemelhe ao problema real no qual estou trabalhando, existem duas restrições que devem ser respeitadas. Estas estão comentadas no código a seguir.

 

#include <stdio.h>
#include <stdlib.h>
#define TAM 3

int fazVetor(int **vet){
    int *array = malloc(sizeof(int) * TAM);

    array[0] = 4;
    array[1] = 7;
    array[2] = 8;

    /* nesta função somente a linha a seguir pode ser alterada. */
    *vet = array;
}

int main()
{
    int **qualquer;

    /* Na função main, somente a linha a seguir NÃO PODE ser alterada. */
    fazVetor(&qualquer);

    printf("\n--==[Valores do Vetor]==--\n\n");
    for(int i = 0; i < TAM; i++){
        printf(" %d", (qualquer[i]));
    }

    printf("\n\n");
    return 0;
}

 

O único objetivo é a impressão dos valores do vetor na função "main". Respeitadas as devidas restrições.

De antemão, muito obrigado!

 

Edwar Saliba Jr.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Senhores, o problema está resolvido. E devo todo o mérito ao meu companheiro do CEFET-MG, Evandro Caldeira, que solucionou o problema.

Segue o código:

    #include <stdio.h>
    #include <stdlib.h>
    #define TAM 3

    int fazVetor(int **vet){
        int *array = (int *) malloc(sizeof(int) * TAM);

        array[0] = 4;
        array[1] = 7;
        array[2] = 8;

        *vet = array;
    }

    int main()
    {
        int *qualquer;

        fazVetor(&qualquer);

        printf("\n--==[Outside Function]==--\n\n");
        for(int i = 0; i < TAM; i++){
            printf(" %d", (qualquer[i]));
        }

        printf("\n\n");
        return 0;
    }

 

A todos vocês que dedicaram seu precioso tempo na tentativa de solucionar este problema, deixo aqui meus sinceros agradecimentos.


Edwar Saliba Jr.

 

Link para o comentário
Compartilhar em outros sites

  • 0

aqui você tem um exemplo de de programa que retorna uma matriz dinamica

//UNAM
//AUTOR: Omar J.
//Fecha: 23092010
//Descripcion: Programa que guarda una matriz de tamanio mxn, usando memoria dinamica

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

void getDatos ( int* rows, int* cols );
int** getMatrix ( int rows, int cols );
void fillMatrix ( int** matrix, int rows, int cols );
void printMatrix ( int** matrix, int rows, int cols );
void freeMemory ( int** matrix, int rows );

int main ( void ) {
    int rows = 0, cols = 0;
    int** matrix = NULL;
    
    getDatos ( &rows, &cols );
    matrix = getMatrix ( rows, cols );
    fillMatrix ( matrix, rows, cols );
    printMatrix ( matrix, rows, cols );
    freeMemory ( matrix, rows );
    return 0;
}

void getDatos ( int* rows, int* cols ) {
    printf ( "Renglones=" );
    scanf ( "%d", rows );
    printf ( "Columnas=" );
    scanf ( "%d", cols );
}

int** getMatrix ( int rows, int cols ) {
    int i;
    int** matrix = NULL;
    matrix = ( int** ) malloc ( sizeof ( int* ) *rows );
    
    for ( i = 0; i < rows; i++ ) {
        * ( matrix + i ) = ( int* ) malloc ( sizeof ( int ) * cols );
    }
    
    return matrix;
}

void fillMatrix ( int** matrix, int rows, int cols ) {
    int i, j;
    
    for ( i = 0; i < rows; i++ ) {
        for ( j = 0; j < cols; j++ ) {
            * ( * ( matrix + i ) + j ) = i + j;
        }
    }
}

void printMatrix ( int** matrix, int rows, int cols ) {
    int i, j;
    
    for ( i = 0; i < rows; i++ ) {
        for ( j = 0; j < cols; j++ ) {
            printf ( "\t%d", * ( * ( matrix + i ) + j ) );
        }
        
        printf ( "\n" );
    }
}

void freeMemory ( int** matrix, int rows ) {
    int i;
    
    for ( i = 0; i < rows; i++ ) {
        free ( * ( matrix + i ) );
    }
    
    free ( matrix );
}

 

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...