堆栈的内存问题
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//main函数中可以在栈分配内存,可以在堆上分配,在内存全局区分配内存:可以被函数F(a)和F(b)使用
//F(b)申请的内存,可以被main使用吗?
//1 、F(b)中在栈上分配的内存,不能被F(a)和main函数使用
//2、F(b)中malloc的内存(堆),可以被main和F(a)函数使用
//3、F(b)中,全局区分配“abcdefg”,内存,是可以被F(a)和main函数使用的
//堆
char *getMen(int num)
{
char *p1 = NULL;
p1 = (char *)malloc(sizeof(char) * num);
if(p1 == NULL)
{
return NULL;
}
return p1;
}
//栈,return首地址,32位的数
//理解指针的关键是在内存。没有内存,就没有指针
//内存空间来自哪里?去向哪里
char *getMem2()
{
char buf[64];
strcpy(buf, "123456789");
printf("buf:%s\n", buf);
return buf;
//局部变量是不能返回内存的块的,返回后也不能使用。代码一执行完毕,内存就被释放。
}
int main(void)
{
char *tmp = NULL;
tmp = getMen(10);
if(tmp == NULL)
{
return 0;
}
strcpy(tmp, "111222"); //向tmp所指向的内存空间中copy数据
tmp = getMem2(); //tmp指向buf[64]的首地址。但是getMem2()函数已经执行完成,内存已经释放
printf("tmp:%s\n", tmp);
return 0;
}
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并,获取更多隐藏干货,QQ交流群:859800032 微信公众号:Crystal软件学堂
![](https://images.cnblogs.com/cnblogs_com/Liu-Jing/1918101/o_210117135834QQ20201227141844.png)
![](https://images.cnblogs.com/cnblogs_com/Liu-Jing/1781432/o_200606025518o_200415115115qrcode_for_gh_5c7d1da35871_258.jpg)
作者:Liu_Jing bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |