Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

erro ao retornar ponteiros

#include <stdio.h>
#include <stdlib.h>
int* uniao(int *v1, int n1, int *v2, int n2){
    int tamanhov3, i, i2=0, i3 =0;
    tamanhov3=n1+n2;
    int v3[tamanhov3];
    for(i=0; i<tamanhov3; i++){
        if(i<n1){
            v3[i] = v1[i2];
            i2++;
        }
        else{
            v3[i] = v2[i3];
            i3++;
        }
    }
    for(i=0;i<tamanhov3; i++)
        printf("%d", v3[i]);
    printf("\n");
    printf("esse eh v3: %d\n", v3);

    return v3;

}

int main()
{
    int i, tamanhov1, tamanhov2;
    tamanhov1=4;
    tamanhov2=3;
    int v1[tamanhov1], v2[tamanhov2];
    printf("Escreva os %d elementos do vetor 1: \n", tamanhov1);
    for(i=0;i<tamanhov1;i++)
        scanf("%d", &v1[i]);
    printf("Escreva os %d elementos do vetor 2: \n", tamanhov2);
    for(i=0;i<tamanhov2;i++)
        scanf("%d", &v2[i]);
    int* p;
    p = uniao(v1, tamanhov1, v2, tamanhov2);

     for(i=0;i<7; i++)
        printf("%i\n", *(p++));

    return 0;
}

estou tentando fazer um código, ele tem 2 vetores na int main. Executa uma função e ela cria um terceiro vetor que é a junção dos 2 vetores da int main. Até ai tudo bem, mas não estou conseguindo retornar esse terceiro vetor para a minha main. Não entendo porque o return não está dando certo

3 respostas
solução!

O problema é que você esta tentando retornar o endereço de memória de uma variável local, quando sair da função esse endereço de memória já não vai mais existir

Ok luis, a função obrigatoriamente tem que ter somente as entradas int uniao(int v1, int n1, int *v2, int n2) ou seja, não posso passar o terceiro vetor como parâmetro. Fiz o seguinte, dentro da função, na hora de criar o vetor eu o criei alocando memória e agora funcionou. Mas será que existe outra possibilidade de tirar o vetor de uma função sem ser alocando memória?

Realmente precisa retornar um vetor?? Senão poderia criar um vetor global com tamanho que deseja e alterado dentro da função, Senão terá que trabalhar alocação dinâmica de memória .