2020-11-01
2020-11-01 本文已影响0人
恰我年少时
include <stdio.h>
include "stdlib.h"
//malloc(memory alloc)
//malloc(size:字节)返回地址,用指针存下分配的地址
//void * any_pointer,当要使用时,必须明确告诉这篇内存要存什么类型
//为什么呢?
//因为要明确定位访问位置
//int * pTemp = (int )malloc(1sizeof(int))强制类型转换
//限制的放缓存-在内存和缓存之间转移
/**
- if(pTemp!=NULL)说明成功{
*pTemp=10;
pTemp[0]=10;
} - if(pTemp==NULL){
- exit(EXIT_FAILURE);
- }
/
/*realloc: - int * pRtmp = (int )realloc(pTemp,2sizeof(int))
- 地址一定要通过malloc分配
- realloc(地址,大小(总大小而不是新分配的大小))之前的内存realloc会自动释放
- 1.重新分配一片能够容纳的内存空间
- 2.将之前的内容复制到新空间中
- 3.原来的内存空间释放
- 4.返回新的地址
- 5.无论malloc还是realloc,都要判断是否失败,
- if(pRtemp == NULL){
- free(pTemp);}
- pTemp=pRtemp;
/
/* free(pTemp)
*/
//realloc
//free
int main() {
//今天做动态分配
//用malloc和realloc
//用free释放内存
//需要定义字符指针变量 保存分配的内存空间 -> 保存字符串
char * psentence=NULL;
int index=0;
while(1){
//如果是第一次要用malloc,之后用realloc
//要用一个数保存长度
//1.在后面加\0 2.方便操作
char ch=getchar();
if(ch=='\n')break;
if(index==0){psentence=(char )malloc(1sizeof(char));
psentence[index]=ch;}
else{char *pTemp = realloc(psentence,(index+1)*sizeof(char));
pTemp[index]=ch;}
index++;
}
char * ptemp=realloc(psentence,(index+1)*sizeof(char));
if(ptemp==NULL){
free(psentence);
exit(EXIT_FAILURE);
}
psentence=ptemp;
psentence[index]='\0';
printf("%s",psentence);
printf("程序结束\n");
return 0;
}