main関数で領域を確保して、関数で配列を初期化

 mallocで確保した領域はその関数が終わると同時に開放されるようなので、基本的には領域を使用したい関数内でmallocを呼んでやらなければならないようです。

 たぶんこんなかんじ。

#include <stdio.h>
#include <stdlib.h>

void makeArray(int n,int *p){
	int i;
	
	for(i=0;i<n;i++){
		p[i] = i;
	}
}

void main(){
	int i,len;
	int *p;
	
	len = 20;
	
	p = (int *)malloc(sizeof(int)*20);
	
	makeArray(len,p);
	
	for(i=0;i<len;i++){
		printf("%d\n",p[i]);
	}
	
	free(p);
}