1,如何申请堆空间 #include <stdlib.h>
void *malloc(size_t size);
//参数 ----要申请的空间的字节数
//返回值 ---- 成功:申请的堆空间的起始地址,失败:NULL
//注意:
1》mallo申请的空间是连续的
2》mallo申请的空间没有初始化
3》malloc返回地址类型为void*,所以需要强制转换为具体的数据类型的指针
例如:
int main(void)
{
int *p;
int i;
p = (int*)malloc(5 * sizeof(int));
if(NULL == p){
perror("malloc"); //打印上面函数调用失败的原因
exit(1); //结束程序,1--表示异常结束,0-表示正常结束
}
for(i = 0 ; i < 5;i++)
p[i] = i+1;
for(i = 0 ; i < 5;i++)
printf("%d\n",*(p+i));
return 0;
}
2,释放堆空间 void free(void *ptr);
//参数 ------ 必须是申请的堆空间的起始地址
//注意:
1》不能重复释放同一块堆空间
2》不能释放申请的堆空间的一部分
3》不能给free传NULL,没有意义
4》free释放了空间之后,如果还使用该空间,则是非法的
例如:
int main(void)
{
int *p;
int i;
p = (int*)malloc(5 * sizeof(int));
if(NULL == p){
perror("malloc"); //打印上面函数调用失败的原因
exit(1); //结束程序,1--表示异常结束,0-表示正常结束
}
for(i = 0 ; i < 5;i++)
p[i] = i+1;
for(i = 0 ; i < 5;i++)
printf("%d\n",*(p+i));
//p = p + 2; //不能释放申请的堆空间的一部分
free(NULL); //没有意义
if(p != NULL)
free(p);
//free(p); //不能重复释放
p = NULL; //释放了堆空间,防止再次非法使用
//*p = 100; //非法使用
//printf("*p = %d\n",*p);
return 0;
}