No, fai attenzione perché le variabili vec che hai utilizzato sono diverse una dall'altra. Se dichiarate nel blocco sono locali al blocco e non esistono all'esterno.
Quella nella prima if va bene perché la utilizzi subito per il return. Ma se la chiamavi topolino era lo stesso, non ha alcun riferimento con le altre.
Le altre due non vanno bene perché sono subito distrutte e nulla hanno a che vedere con l'altra che hai dichiarato in seguito.
In pratica il tuo codice è equivalente a questo
#include <stdio.h>
#include <stdlib.h>
float* maxDispari(float* v1, float* v2, int dim1, int dim2):
int main(int argo, char** argv){
float* v1[4] = {1.0,2.0,3.0,4.0}
float* v2[4] = {4.0,5.0,6.0,7.0}
int dim1 = 4;
int dim2 = 4;
float* v3 = maxDispari(v1,v2,dim1,dim2);
return 0;
}
float* maxDispari(float* v1, float* v2, int dim1, int dim2){
if ((v1 == NULL && v2 == NULL) || (dim1 <= 0 && dim2 <= 0)){
float* topolino = NULL;
return topolino;
}
if (v1 == NULL || dim1 <= 0){
float* paperino = (float*)malloc(dim2*sizeof(float));
}
if (v2 == NULL || dim2 <= 0){
float* pluto = (float*)malloc(dim1*sizeof(float));
}
int max = 0;
if (dim1 >= dim2){
max = dim1;
}else{
max = dim2;
}
float* vec = (float*)malloc(max * sizeof(float));
if (dim1 > dim2){
for (int i = 0; i < dim2; i++){
if((i+1)%2 == 0){
if(v1[i] > v2[i]){
vec[i] = v1[i];
}else{
vec[i] = v2[i];
}
}else{
vec[i] = v1[i];
}
}
for(int i = dim2; i < dim1; i++){
vec[i] = v1[i];
}
}
if (dim2 > dim1){
for(int i = 0; i < dim1; i++){
if ((i+1)%2 == 0){
if (v1[i] > v2[i]){
vec[i] = v1[i];
}else{
vec[i] = v2[i];
}
}else{
vec[i] = v1[i];
}
}
for(int i = dim1; i < dim2; i++){
vec[i] = v2[i];
}
}
if (dim1 == dim2){
for (int i = 0; i < dim1 ;i++){
if ((i+1) %2 == 0){
if (v1[i] > v2[i]){
vec[i] = v1[i];
}else{
vec[i] = v2[i];
}
}else{
vec[i] = v1[i];
}
}
}
return vec;
}
La tua funzione dovrebbe iniziare con
float* maxDispari(float* v1, float* v2, int dim1, int dim2){
float* vec = NULL;
...
return vec;
}
e poi dovresti correggere il codice seguente