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."