堆栈的内存问题

#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;
}

posted @ 2017-03-27 17:22  Liu_Jing  Views(190)  Comments(0Edit  收藏  举报