首页 > 系统相关 >动态内存的开辟

动态内存的开辟

时间:2023-02-10 15:56:59浏览次数:62  
标签:arr ptr char 地址 动态内存 printf 0x7fff2c84ed90 开辟

c程序的内存分配:

执行程序会将程序加载到内存,内存大体上被分为三个区:栈段、堆段、数据段(全局变量和static变量)

 

 栈:局部变量和形式参数会保存在栈区,函数调用完之后,释放栈帧和函数中的局部变量。

堆:堆区空间远大于栈区空间,可自行分配,并在使用完后手动释放内存空间。

数据段:存放全局变量和static修饰的变量。整个工程可见,全局变量在main函数调用之前就已开辟栈空间

 

问题分析:

//实质是值传递
#include <stdio.h> #include <stdlib.h> #include <string.h> void getmemory(char *p) {
  //相当于有 p = (int *)0x7fff2c84ed90;即p指向这块(0x7fff2c84ed90)地址 printf("p0=%p \n",p);//这里的p指向数组的地址 p = (char *)malloc(100);//然后这里又让p重新指向新分配的一块地址 printf("p1=%p \n",p);//所以p0和p1的地址不一样
  strcpy(p, "hello wo!");//内容不会复制到数组中 } int main() { char arr[100] = "abc"; printf("arr=%p \n",arr); char *ptr = arr; printf("ptr=%p \n",ptr); getmemory(ptr);//函数结束后都没有操作到arr的地址, /* Write C code in this online editor and run it. */ printf("ptr=%s \n",ptr); return 0; }

结果:
arr=0x7fff2c84ed90
ptr=0x7fff2c84ed90
p0=0x7fff2c84ed90
p1=0x121c270
ptr=abc

 

标签:arr,ptr,char,地址,动态内存,printf,0x7fff2c84ed90,开辟
From: https://www.cnblogs.com/zj-studyrecoding/p/17109188.html

相关文章