Das Problem ist, dass allocate_memory den Parameter arr selbst ändert. Das funktioniert nicht, denn der Pointer an sich wird auch nur by-Value übergeben, also kopiert. Du musst hier also mit einem int** arbeiten:
Code:
#include <stdio.h>
#include <stdlib.h>
void allocate_memory(int **arr, int arraysize) {
int i;
*arr = (int *) malloc(sizeof(int)*arraysize);
(*arr)[0]=arraysize;
for (i=1; i<arraysize; i++) (*arr)[i]=i;
}
void read_memory(int *arr) {
int i;
for (i=0; i<arr[0]; i++) printf("arr[%i]=%i\n",i,arr[i]);
}
int main()
{
int *arr;
allocate_memory(&arr,4);
read_memory(arr);
return 0;
}
Lesezeichen