conversión inválida de * void a * int usando malloc (sizeof ())

Estoy escribiendo un progtwig que calcula el máximo común denominador de dos números, pero tengo problemas con la función malloc y los punteros. En realidad, está claro cómo funcionan los segmentos de stack y montón en la memoria y por qué. Pero aún no puedo entender cuando declarar un puntero y usar malloc es funcional o no, es necesario o no, en un progtwig. Aquí está el código:

 #include  #include  #include  int *calcolaDivisori(int); int main(int argc, char** argv) { int foundCounter = 0; int i,j,s1,s2; int n1,n2; int mcd = 1,mcm; int *pn1,*pn2; int d1[100],d2[100]; // INPUT dei due interi printf("Inserisci il primo numero :"); scanf(" %d", &n1); printf("\nInserisci il secondo numero :"); scanf(" %d", &n2); // calcolo divisori del primo e del secondo numero e li assegno ai relativi array pn1 = calcolaDivisori(n1); if (!pn1) return 1; pn2 = calcolaDivisori(n2); if (!pn2) return 1; for (i=0;i<n1;i++) { d1[i] = pn1[i]; } for (i=0;i<n2;i++) { d2[i] = pn2[i]; } free(pn1); free(pn2); // confronto i divisori e calcolo il MCD s1 = sizeof(d1) / sizeof(int); s2 = sizeof(d2) / sizeof(int); for(i=0; i<s1; i++) { for (j=foundCounter; j<s2;j++) { if (d1[i] == d2[j]) { mcd*= d1[1]; foundCounter = j+1; break; } } } printf("\n\nIl minimo comune divisore e' : %d", mcd); return 0; } int *calcolaDivisori(int num) { int i; int *a = malloc(num * sizeof(int)); if (!a) return NULL; for (i=2;i<num;i++) { if (num%i == 0) { num/=i; a[i-2]=i; } } return a; } 

Recibo el error en el título cuando se ejecuta el comando:

 int *a = malloc(sizeof(int)); 

Necesitas lanzar:

 int *a = (int*)malloc(num * sizeof(int)); 

Porque no hay conversión implícita de void* a type * en C ++.

Tenga en cuenta que este modelo no es obligatorio en C y podría ser peligroso hacerlo en C.

Excepto por #include , nada en su código es C ++. Así que elimínalo y compílalo con un comstackdor de C y no necesitarías este lanzamiento.