静态分配和动态分配
在讲述这个之前我们分享一段程序,从这个程序中我们来思考下为什么,类似的程序最后的输出结果不一样:
char* stackMalloc()
{
char str[] = "yelllo";
return str;
}
char* heapMalloc()
{
char *str = "helllo";//
return str;
}
int main()
{
char *str = heapMalloc();
int i = 0;
while(str[i] != '\0')printf("字符串中的元素%c\n", str[i++]);
return 0;
}
调用第一个函数时,str指向的那块内存在函数返回时,被系统释放了。返回后的str什么都没有。最后输出的都是乱的。而调用第二个函数时,str指向的那块内存在函数返回时,竟然没被系统释放,最后在主函数中能够把str指向的内存里面的数据输出来。为什么第二个函数返回时,str指向的内存区域没被系统释放??为此下面引出本文我们要讲的主题—静态分配和动态分配。