内存分配以及指针处理的相关测试代码
来源:互联网 发布:java错误等级 编辑:程序博客网 时间:2024/06/06 11:37
#include<stdio.h>#include<stdlib.h>#include<assert.h>void GetStr(char *p){p="123456";//指向一个全局数据区 字符串常量int a=10;//栈区static int b=10;//全局静态区char *q=(char*)malloc(12);//堆区char *r=(char*)malloc(12);//堆区printf("addr p=%p a=%p b=%p q=%p r=%p\n",p,&a,&b,q,r);//全局数据区{p,b} 栈区{a} 堆区{q,r}free(q);//释放指针内存空间free(r);q=NULL;//防止野指针r=NULL;}char *GetStr2(void){//数组char p[]="123456";//栈内存数据return p;//这里强调不要用 return 语句返回指向“栈内存”的指针,因为该内存在函数结束时自动消亡 结果这里出现警告!}void test(){char *p=NULL;p=(char*)malloc(12);GetStr(p);printf("======\n\np=%p\n",p);//堆区p=GetStr2();//出错!!//printf("%s\n",p);assert(p!=NULL);printf("%s\n",p);free(p);p=NULL;}char *GetStr3(){char *p="123456";return p;}void test2(void){char *str =NULL;printf("addr str=%p\n",str);//str地址之后发生了变化str = GetStr3();printf("addr str=%p\n",str);printf("%s\n",str) ;//GetStr3 设计无效 随时调用都可以/*GetStr3 内的“123456”是常量字符串,位于静态存储区,它在程序生命期内 *恒定不变。无论什么时候调用 GetString2,它返回的始终是同一个“只读”的内存块。 */}int main(){//test();test2();return 0;}
0 0
- 内存分配以及指针处理的相关测试代码
- 指针以及内存的分配
- 指针以及内存分配
- 指针以及内存分配
- 指针以及内存分配
- 内存分配指针相关1
- 指针以及内存分配 (转)
- 内存分配、野指针、指针、数组相关
- 动态内存分配涉及到的二级指针,传递相关
- 二维数组和指向指针的指针 ,指针做形参做局部变量以及内存分配
- 指针做形参做局部变量以及内存分配
- 动态内存分配以及指针与const
- 指针做形参做局部变量以及内存分配
- 指针做形参做局部变量以及内存分配
- 指针做形参做局部变量以及内存分配
- 指针做形参做局部变量以及内存分配
- 指针做形参做局部变量以及内存分配
- 指针做形参做局部变量以及内存分配
- java面向对象6
- HLSL Attributes (Xbox 360)
- Android HandlerThread
- POJ---2418-Hardwood Species(字典树)
- java面向对象7
- 内存分配以及指针处理的相关测试代码
- Linux程序之线程轮询
- [C++11] 顺序存储的完全二叉树构造树形结构
- Generating Shaders From HLSL Fragments
- java面向对象8
- C# 引用ref/out
- Objective-C 编程语言官网文档(五)-属性的声明
- java面向对象9
- OC基础第四讲:字典