【发布时间】:2016-03-21 01:41:12
【问题描述】:
我正在编写一个计算两个数字的最大公分母的程序,但我遇到了malloc 函数和指针的问题。实际上很清楚堆栈和堆段如何在内存中工作以及为什么。但是,我还不能理解在程序中声明指针和使用malloc 是否具有功能,是否有必要。这是代码:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
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));
【问题讨论】:
-
只有在将代码编译为 C++ 时才会收到此警告。 C 编译器不会给出这个警告。
-
@kaylum -
#include <iostream>我想说的另一个赠品。 -
@DanAllen 是的,你是对的。我错过了,只看到了
C标签。 @Ghislo 请修复您的标签,因为您似乎正在编写 C++ 代码而不是 C 代码(如果这确实是您的意图)。 -
#include <iostream>删除此行。 -
您已标记问题 C,但使用了几个 C++ 结构。您需要决定您是在尝试编写 C 程序还是 C++ 程序。两者在这方面的建议完全不同。
标签: c pointers malloc heap-memory