动态分配内存

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[]) {
//为什么需要动态分配内存?
/*
优点:在使用之前已经确保内存是存在的
缺点:大小固定了 浪费空间||空间不足
*/
char word[4] = {};

/*
定义一个指针变量 系统只是为这个变量本身分配了内存空间
暂时没有指向任何数据
不能存储数据 因为没有内存来存储
*/
//char *name = NULL;

/*
要使用这个指针 就必须为这个指针变量指向的内存空间 分配内存
void * 任意的指针类型 这种类型的数据在使用的时候必须转化为特定的类型
void *pTemp;
(int *)pTemp;
1.分配内存空间malloc(内存空间的大小(字节))
2.必须判断分配内存是否成功
3.realloc重新分配内存空间
4.free释放内存空间
*/
// name = (char *)malloc(5 * sizeof(char));
//
// if (name == NULL){
// //分配内存失败 退出程序
// exit(EXIT_FAILURE);
// }
//
// //写入数据
// printf("请输入姓名:");
// scanf("%s", name);
//
// printf("name:%s\n", name);


{
char *name = NULL;
char c ;
int count = 0;

while (1) {
c = getchar();

if (c != '\n') {
if (count == 0) {
//第一次 分配一个字节的内存空间
name = (char *)malloc(1);
if (name == NULL) {
exit(EXIT_FAILURE);
}
} else{
// 在之前的基础上添加一个字节的内存空间
name = (char *)realloc(name, count + 1);
if (name == NULL) {
free(name);
exit(EXIT_FAILURE);
}
}

name[count] = c;

count++;
} else{
name = (char *)realloc(name, count + 1);
if (name == NULL) {
free(name);
exit(EXIT_FAILURE);
}
name[count] = '\0';

break;
}
}

//必须是通过malloc realloc分配的内存空间的地址
free(name);
}
return 0;
}

posted @ 2018-07-22 23:36  健泽  阅读(182)  评论(0编辑  收藏  举报