35.栈区和堆区


#include
#include
int main()
{
	int *p;
	int a;//定义一个栈区变量 
	p = &a;//指针指向栈区空间 
	*p = 10;
	printf("*p = %d\n", *p);
	return 0;
} 

int main01()
{
	int *p = NULL;
	p = (int *)malloc(sizeof(int));
	if(p == NULL)
	{
		printf("分配失败");
		return -1;
	}
	*p = 10;
	if(NULL != p)
	{
		free(p);
		p = NULL://这一步很重要 
	}
	//动态分配的空间,如果程序没有结束,不会自动释放,需要程序员手动释放,
	//同一块堆区内存只能释放一次,所谓的释放不是指内存消失,而是指这块内存系统部可以再次使用 
	//内存泄漏:动态分配了空间不释放 
	//内存污染:非法使用内存 
	
} 

int main02() 
{
	char *p = NULL;
	p = (char *)malloc(0);
	if(p == NULL)
	{
		printf("分配失败\n");
		return 0;
	}
	
	strcpy(p, "mikejiang");
	printf("%s\n", p);
	
	free(p);
	return 0;
}