I'm writing a program that calculates the greatest common denominator of two numbers, but i'm getting problem with malloc
function and pointers. Actually it's clear how the stack and the heap segments work in the memory and why. But yet i'm not yet able to understand when declaring a pointer and using malloc
is functional or not, is necessary or not, in a program. here is the code :
#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("
Inserisci 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("
Il 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;
}
I get the error in the title when is run the command :
int *a = malloc(sizeof(int));
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…