为什么使用动态分配内存
如果使用指针变量接收数据,必须先为这个指针变量分配一片指向的内存空间
有内存空间才能存数据
name=(char*)malloc(10*sizeof(char));
if(name==NULL){
free(name);
exit(EXIT_FAILURE);
}
scanf("%s",name);
printf("%s\n",name);
realloc(name,20*sizeof(char))//使用realloc动态改变已经分配的大小
//增加或减少 ,必须释放之前的内存
free (name);//使用完毕手动释放内存
常量字符串的内存空间有系统自动分配
在常量区里面分配当程序结束才会被释放
常量区-常量const int a=1
静态区 static
栈 局部变量 int a =10;离开作用域就自动收回
堆 自己申请的内存 malloc calloc realloc,必须自己释放
为什么要动态分配内存:
1.存储的数据,需要延长生命周期
2.一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据
例,用数组存储名字,且不浪费空间
#include<stdio.h>
#include<stdlib.h>
int main()
{
char*name;
/*
如果使用指针变量接收数据,必须先为这个指针变量分配一片指向的内存空间
有内存空间才能存数据
*/
name=(char*)malloc(10*sizeof(char));
while(1){
scanf("%s",name);
printf("%s\n",name);
if(name==NULL){
free(name);
// exit(EXIT_FAILURE);
}
realloc(name,20*sizeof(char));
//使用realloc动态改变已经分配的大小
//增加或减少 ,必须释放之前的内存
free(name);
//使用完毕手动释放内存
}
return 0;
}