静态分配和动态分配

本文介绍了内存管理中的栈区和堆区。栈区由编译器自动分配释放,用于存放函数参数和局部变量,内存连续分配;堆区则通常由程序员手动管理,通过动态分配,内存分布不连续,需要程序员负责释放。堆内存从低地址向高地址增长,而栈内存相反。
摘要由CSDN通过智能技术生成
静态分配和动态分配
在讲述这个之前我们分享一段程序,从这个程序中我们来思考下为什么,类似的程序最后的输出结果不一样:
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指向的内存区域没被系统释放??为此下面引出本文我们要讲的主题—静态分配和动态分配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值