- #1
transgalactic
- 1,395
- 0
Code:
#include <stdio.h>
#include <stdlib.h>
/* required for the malloc, calloc and free functions */
int main() {
float *calloc1, *calloc2, *malloc1, *malloc2;
int i;
calloc1 = calloc(3, sizeof(float)); /* might need to cast */
calloc2 = calloc(3, sizeof(float));
malloc1 = malloc(3 * sizeof(float));
malloc2 = malloc(3 * sizeof(float));
if(calloc1!=NULL && calloc2!=NULL && malloc1!=NULL && malloc2!=NULL) {
for(i=0 ; i<3 ; i++) {
printf("calloc1[%d] holds %05.5f, ", i, calloc1[i]);
printf("malloc1[%d] holds %05.5f\n", i, malloc1[i]);
printf("calloc2[%d] holds %05.5f, ", i, *(calloc2+i));
printf("malloc2[%d] holds %05.5f\n", i, *(malloc2+i));
}
free(calloc1);
free(calloc2);
free(malloc1);
free(malloc2);
return 0;
}
else {
printf("Not enough memory\n");
return 1;
}
}
Output:
calloc1[0] holds 0.00000, malloc1[0] holds -431602080.00000
calloc2[0] holds 0.00000, malloc2[0] holds -431602080.00000
calloc1[1] holds 0.00000, malloc1[1] holds -431602080.00000
calloc2[1] holds 0.00000, malloc2[1] holds -431602080.00000
calloc1[2] holds 0.00000, malloc1[2] holds -431602080.00000
calloc2[2] holds 0.00000, malloc2[2] holds -431602080.00000
at first they build 4 pointers
each one of them points to the start of a sector whose size is 3 float variables.
then the print some how
calloc1 should return only the address
*(calloc2+i) should return the data inside the address
but they get similar output
i can't understand these printf lines
??