12月15号 动态分配内存realloc
动态分配内存realloc
实现语句
void * realloc (void *, size_t);
前面一个void 表示返回重新分配的内存空间的首地址
后面一个void *指针指向的内存区域必须是使用malloc分配过的
size_t 表示现在总共需要多少内存空间
注意:如果使用realloc没有获取到内存空间,那么必须对之前的内存进行释放
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
char *name = NULL;
char temp;
int total = 0;
while (1) {
//从终端获取一个字符
temp = getchar();
//判断这个字符是不是回车键\n
if (temp == '\n') {
break;
} else{
//为这个字符添加一篇内存空间
//判断是不是第一次分配内存空间
if (name == NULL) {
//第一次
name = (char *)malloc(1 * sizeof(char));
if (name == NULL) {
exit(EXIT_FAILURE);
}
} else{
//不是第一次,需要在之前的内存空间里面添加 一个字符的空间
char *pTemp = NULL;
pTemp = (char *)realloc(name, (total+1)*sizeof(char));
if (pTemp == NULL) {
//释放掉之前的内存空间
free(name);
exit(EXIT_FAILURE);
}
name = pTemp;
}
//保存这个字符
*(name + total) = temp;
total++;
}
}
printf("%s\n", name);
free(name);
return 0;
}