内存分区代码分析(五种,栈区,堆区,data区,值传递1,值传递2)

    技术2024-10-05  54

    **data区** int *fun() { static int a=10; return &a; } int main() { int *p=NULL; p=fun(); *p=100; printf("p = %d\n",*p); return 0; }` ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200703224000631.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjM4MTYwOA==,size_16,color_FFFFFF,t_70#pic_center) **返回栈区地址** ```c int *fun() { int a=10; return &a; } int main() { int *p=NULL; p=fun(); *p=100;//操作野指针指向的内存,err return 0; }

    返回堆区地址

    int *fun() { int *tmp=NULL; tmp=(int *)malloc(sizeof(int)); *tmp=100; return tmp; } int main() { int *p=NULL; p=fun(); printf("p= %d\n",*p);//ok //堆区空间,使用完毕,手动释放 if(p!=NULL) { free(p); p=NULL; } }

    值传递1

    void fun(int *tmp) { *tmp = 100; } int main() { int *p=NULL; p=(int *)malloc(sizeof(int)); fun(p); printf("p= %d\n",*p);//ok,*p为100 return 0; }

    值传递2

    void fun(int *temp) { tmp=(int*)malloc(sizeof(int)); *tmp=100; } int main() { int *p=NULL; fun(p); printf(" p= %d\n",*p); return 0; }

    Processed: 0.010, SQL: 9