malloc和free的有关问题

malloc和free的问题
char* PTR;
#define MAX_SIZE 100

void int_to_str(int value,char *buff,int flag){
char a[MAX_SIZE]={0};//这个数组是逐步跟随a[i]=value%flag;语句进行接收转换后的进制数。不会用动态数组,MAX_SIZE就挺好的。
int i=0;
char* ptrEnd=NULL;

while(value){//逐步求解进制数
a[i]=value%flag;
value=value/flag;
i++;
}
PTR=(char*)malloc(sizeof(i+1));//动态申请内存空间,大小是i+1。这个1是为截止符留的空间。
ptrEnd=PTR; //先让ptrEnd指向内存区的首地址,为下面的复制数据做好准备。
while(i){   //此时第一次循环的i是前面累加后的i值,不是0。
*ptrEnd=a[i-1];
ptrEnd++;
i--;
}
*ptrEnd='#';//此时数据复制完毕,以#为截止符,不能用'\0',因为这个0 跟数字里的0等同。
while(*PTR!='#'){
printf("%d",*PTR);
PTR++;
}
printf("\n");

free(PTR);//问题就出在这一句上;
PTR=NULL;
}
------解决思路----------------------
知道改吧

改成 PTR=(char*)malloc(i+1);