Boa tarde, poderiam me ajudar com uma questão relacionada à alocação dinâmica com união de dois vetores? Esta é a questão:
2) Considere dois vetores de inteiros organizados em ordem crescente. Dentro de cada vetor não há
valores repetidos, mas entre eles pode haver coincidências de valores. Por exemplo, v1 = {1, 3, 5, 9,
12, 16, 23} e v2 = {1, 2, 6, 7, 9, 15, 21, 25}. Escreva uma função que crie um novo vetor contendo
o conjunto de números inteiros definido pela união dos dois conjuntos originais, também em ordem
crescente. Por exemplo, o vetor u = {1, 2, 3, 5, 6, 7, 9, 12, 15, 16, 21, 23, 25} corresponde à união
de v1 e v2. A função recebe como parâmetros o ponteiro e o tamanho de cada vetor e ponteiro p. A
função deve alocar dinamicamente o novo vetor, armazenar o seu tamanho na variável apontada por
p e retornar o ponteiro para o início do vetor. O protótipo da função é:
int* uniao(int* v1, int n, int* v2, int m, int *p);
A solução que eu achei e criei foi:
#include <stdio.h>
#include <stdlib.h>
int* uniao(int* v1, int n, int* v2, int m, int *p){
int i, j, cont;
for(i = 0; i<n;++i){
for(j=0;j<m;++j){
if(v1!= v2[j]) cont++; } } int x = cont + n; int *uniao; uniao = (int*)malloc(x*sizeof(int)); int z=0; for(i=0; i<n;++i){ for(j=0;j<m;++j){ while(z<x){ v1= uniao[z]; z++; v2[j] = uniao[z]; } }
}
*p = x; return p; }
int main(){ int n, m; printf("Digite o valor de n e m: \n"); scanf("%d %d", &n, &m); int i, j; int v1[n], v2[m]; for(i=0;i<n;++i){ printf("Elemento %d: \n",i); scanf("%d", &v1); } for(j=0;j<m;++j){ printf("Elemento %d: \n", j); scanf("%d", &v2[j]); } int *p; int* unir = uniao(v1,n,v2,m,p); printf("A uniao tera tamanho de %d", unir); return 0; } */
Mesmo compilando, o programa dá erro durante a execução após a entradas dos valores nos dois vetores, poderiam me ajudar?