Penso di aver capito, è stato un errore di disattenzione scusate.
#include <stdio.h>
#include <stdlib.h>
int lettura_dati(int *v, int n) {
	for (int i = 0; i < n; ++i) {
		scanf("%d", &v[i]);
		if (v[i] == 0)
			return i;
	}
	return n;
}
int *estrae_valori(int *vettoreIngresso1, int *vettoreIngresso2, int dim1, int dim2, int *dim) {
	int *vettoreUscita;
	int j = 0;
	int k = 0;
	for (int i = 0; i < dim1; i++) {
		if (vettoreIngresso1[i] > 0)
			*dim = *dim + 1;
	}
	for (int i = 0; i < dim2; i++) {
		if (vettoreIngresso2[i] < 0)
			*dim = *dim + 1;
	}
	vettoreUscita = (int*)malloc(*dim * sizeof(int));
	printf("%d", *dim);
	for (int i = 0; i < dim1; i++) {
		if (vettoreIngresso1[i] > 0) {
			vettoreUscita[k] = vettoreIngresso1[i];
			k++;
		}
	}
	for (int i = 0; i < dim2; i++) {
		if (vettoreIngresso2[i] < 0) {
			vettoreUscita[k + j] = vettoreIngresso2[i];
			j++;
		}
	}
	return vettoreUscita;
}
void stampa(int v[], int dim) {
	for (int i = 0; i < dim; i++) {
		printf("Elemento di indice %d: %d", i, v[i]);
		printf("\n");
	}
}
int main(void) {
	int *v1;
	int *v2;
	int *vR;
	int dim1;
	int dim2;
	int dimR = 0;
	printf("\nInserire la dimensione massima di v1: ");
	scanf("%d", &dim1);
	printf("\nInserire la dimensione massima di v2: ");
	scanf("%d", &dim2);
	v1 = (int*)malloc(dim1*sizeof(int));
	v2 = (int*)malloc(dim2*sizeof(int));
	dim1 = lettura_dati(&v1, dim1);
	dim2 = lettura_dati(&v2, dim2);
	vR = estrae_valori(&v1, &v2, dim1, dim2, &dimR);
	stampa(vR, dimR);
	free(vR);
	free(v1);
	free(v2);
	return 0;
}
In questo modo dovrebbe andare, però quando faccio free(v1) continua a darmi questo errore 
"Eccezione generata in corrispondenza di 0x5233AACD (ucrtbased.dll) in Project1.exe: 0xC0000005: violazione di accesso durante la lettura del percorso 0xFFFFFFFE."