int* first_n_squares(unsigned n) {
int* array;
array = malloc(n * sizeof(*array)); // ❶ malloc
if (array == NULL) { // ❷ Fehlerbehandlung
perror("malloc");
exit(EXIT_FAILURE);
}
for (int i = 0; i < n; ++i) {
array[i] = i * i;
}
return array;
}
int main(void) {
int* ptr;
ptr = first_n_squares(200);
printf("10*10 = %d\n", ptr[10]) ;
free(ptr); // ❸ free
return 0;
}
sizeof(void*)
ist plattformabhängig (32b vs. 64b CPUs)intptr_t(3)
und uintptr_t
haben immer die richtige Größe.