------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
// 常见的内存分配函数
//
// Created by 李佳乐 on 15-3-19.
// Copyright (c) 2015年 李佳乐. All rights reserved.
//
//******************* malloc--calloc--realloc ***************************
//动态内存分配,在内存的堆区分配
//动态内存分配函数介绍:
//注意:动态内存分配函数都在stdlib.h头文件中
// 1)malloc,返回值是新申请的内存空间的首地址,如果失败返回的是NULL
// void * malloc(字节数)
// 2)calloc(n,size),可以在堆区中申请 n个,大小是size的空间
// 如果分配成功返回值是新申请的内存空间的首地址
// 如果失败返回的是NULL
// calloc申请成功后,会自动初始化
// int a[10];
// 3)realloc
// realloc(指针变量p,size) 把指针变量p所指向的内存空间的大小
//更改成size
// 注意:realloc 返回的是扩展后的空间的首地址
//
// 扩展的结果:
// 如果当前p相邻的空间有足够大得位置,扩展后空间的首地址不变
// 如果当前p相邻的空间没有足够大得位置,重新寻找一块足够大的空间,返回回来(把新空间的首地址返回)并且把原来空间的值拷贝过来
#include <stdio.h>
//引入头文件
#include <stdlib.h>
//malloc 函数的使用方法
//申请一个新的内存空间
void malloc1(){
//3 个整数 1,10,100
int *p = (int *) malloc(12);
if(p!=NULL){
//使用新申请的内存空间
*p = 1 ;
*p = 10;
*p = 100;
}
for(int i = 0;i < 3;i++){
printf("%d\t",*(p+i));
}
}
//calloc的函数使用
//申请多个内存空间
void calloc1(){
//申请10个大小为4的内存空间
int *p = (int *)calloc(10, sizeof(int));
if(p != NULL){
//通过循环给内存空间赋值
for(int i = 0;i<10;i++){
*(p+i) = i;
}
}
//查看内存空间的内容
for(int i = 0;i <10;i++){
printf("%d\n",*(p+i));
}
}
int main(int argc, const char * argv[]) {
int *P = malloc(4);
*p = 1;
printf("%p\n",p);
p = (int *) realloc(p , 8);
printf("%p\n",p);
*(p+1) = 10;
printf("%d,%d\n",*p,*(p+1));
return 0;
}