/*
malloc
void * malloc(unsigned size);
从内存的堆区分配大小为size个字节的连续空间
如果分配成功,返回内存首地址,否,返回NULL
calloc
calloc(块数,长度);
分配多少块,长度为多少的内存空间
地址连续
可以自动初始化为0
relloc
如果有足够相邻空间,重新分配需求大小空间,将原有数据复制到新空间
如果有足够相邻空间,直接扩充连接空间
*/
#include <stdio.h>
#include <stdlib.h>
void test1(){
int *p = (int *)malloc(4*sizeof(int));
memset(p,48,16);//初始化
if (p != NULL) {
// *p = 10;
// *(p+1) = 100;
// *(p+2) = 1000;
// *(p+3) = 10000;
}else{
printf("内存申请失败!\n");
}
for (int i = 0; i < 4; i++) {
printf("%c\t",*(p+i));
}
}
void test2(){
int *p = (int *)calloc(4,sizeof(int));
if (p != NULL) {
// *p = 10;
// *(p+1) = 100;
// *(p+2) = 1000;
// *(p+3) = 10000;
}else{
printf("内存申请失败!\n");
}
for (int i = 0; i < 4; i++) {
printf("%d\t",*(p+i));
}
}
int main(int argc, const char * argv[]) {
int *p = (int *)calloc(4,sizeof(int));
printf("old %p\n",p);
p = realloc(p, 40*sizeof(int));
printf("new %p\n",p);
if (p != NULL) {
// *p = 10;
// *(p+1) = 100;
// *(p+2) = 1000;
// *(p+3) = 10000;
}else{
printf("内存申请失败!\n");
}
for (int i = 0; i < 4; i++) {
printf("%d\t",*(p+i));
}
return 0;
}
|
|