使用malloc(sizeof())从* void到* int 的无效转换

我正在编写一个计算两个数字的最大公分母的程序,但是我遇到了malloc函数和指针的问题。 实际上很清楚堆栈和堆段如何在内存中工作以及原因。 但是,在程序中,在声明指针并且使用mallocfunction与否时,我还无法理解。 这是代码:

 #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; } 

运行命令时,我在标题中得到错误:

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

你需要施放:

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

因为在C ++中没有从void*type *隐式转换。

请注意,C中不需要此强制转换,并且在C中可能会有危险 。

#include ,代码中没有任何内容是C ++。 所以删除它并使用C编译器编译它,你不需要这个强制转换。