使用malloc(sizeof())从* void到* int 的无效转换
我正在编写一个计算两个数字的最大公分母的程序,但是我遇到了malloc
函数和指针的问题。 实际上很清楚堆栈和堆段如何在内存中工作以及原因。 但是,在程序中,在声明指针并且使用malloc
function与否时,我还无法理解。 这是代码:
#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编译器编译它,你不需要这个强制转换。