// 堆区的内存分配
// 手动开辟内存
// void *malloc(size);
// 返回值类型:void*,泛类型,可以转换成其他类型指针,函数返回的是一个指针
// malloc:函数名
// size:所要分配的内存大小(字节数),无符号整型
// char *p = malloc(7);
// strcpy(p, "iPhone");
// *p = 66;
// p[3] = '\0';
// strcpy(p + 2, "abcde");//越界
// strcpy(p, p + 2);//hone
char *p = malloc(7);//栈区分配8个内存空间 在堆区分配7个字节把堆区的首地址存放在栈区内容中,&p是栈区的首地址
strcpy(p, "iPhone"); //常量区分配7个字节拷贝到对应栈区中
char *p1 = "iPhone";//拷贝的是地址 指向常量区 内容不能被修改
char string[] = "iPhone";//拷贝的是内容 拷贝到栈区中,在栈区中的内容是可以被修改的
//创建一个栈区指针,指向堆区所分配的6个字节的首地址
// int *p = malloc(6);
//把常量区整型常量10,拷贝到堆区前四个字节
// *p = 10;
// p[1] = 20;//error,越界
//free(void *)释放内存函数
// void * :可以接受各种类型的指针
//内存泄露:一块内存一直被占用,得不到释放
//free会把malloc申请是内存释放(重新标记成可用)
// free(p);
//申请一个内存空间随机赋10个整数放在数组中
// int *p = malloc(sizeof(int) * 10);
// for (int i = 0; i < 10; i++) {
// *(p + i) = arc4random() % 21 + 10;
// printf("%d ", *(p + i));
// }
// free(p);
// //释放后p现在还有内容
// p = NULL;//把指针置空
// int *p = malloc(2);//内存泄露
// p = malloc(4);
// free(p);
|
|