C-内存四区模型分析【栈区、堆区、全局区、代码区】

初始化全局区分析

  • 全局区: 分为初始化全局变量区、初始化静态常量区、初始化文字常量区
char* func1(){
	char *s1="hello";
	return s1;
}

int main(int arg,char *argu[]){
	char *s1="hello";
	char *s2=func1();
	printf("s1地址%p,s2地址%p\n",s1,s2);//s1 s2地址都相同都指向同一块文字常量区

	system("pause");
}
  • 内存四区图解
    C-内存四区模型分析【栈区、堆区、全局区、代码区】_第1张图片

栈分析

  • 存储局部变量
char *func(){
	char str[]="hello";
	return str;
}
int main(int arg,char *argu[]){
	
	char *p=NULL;
	p=func();
	printf("%s",p);//乱码  由于返回地址时栈区已经被释放
	system("pause");
}

  • 内存四区图解
    C-内存四区模型分析【栈区、堆区、全局区、代码区】_第2张图片

堆分析

char *func(){
	char *s=(char*)malloc(sizeof("hello"));
	if(s==NULL){
		exit(0);//堆区内存申请失败
	}
	strcpy(s,"hello");
	return s;
}
int main(int arg,char *argu[]){
	
	char *p=NULL;
	p=func();
	printf("%s",p);//hello
	free(p);//释放堆区内存
	system("pause");
}
  • 内存四区图解

C-内存四区模型分析【栈区、堆区、全局区、代码区】_第3张图片

你可能感兴趣的:(#,C/C++,内存管理,malloc,指针,内存泄漏)