c语言中的动态内存分配
来源:互联网 发布:禁酒令 知乎 编辑:程序博客网 时间:2024/04/29 11:27
动态内存分配是在堆上开辟空间,当我们用malloc分配一个空间得到空间返回地址,而当我们想扩大空间时,用realloc返回的地址却不一定是原来的地址,这牵涉到内存的分页问题,例如:
1 #include <stdio.h>
2 #include <string.h>
3 #include<stdlib.h>
4 void main()
5 {
6 char *p1,*p2;
7 p1=(char*)malloc(18);
8 p2=(char*)malloc(18);
9 printf("p1=%p\tp2=%p\n",p1,p2);
10 strcpy(p1,"hello world");
11 strcpy(p2,"helloworld");
12 p1=(char*)realloc(p1,1024);
13 p2=(char*)realloc(p2,10);
14
15 printf("p1=%p\tp2=%p\n",p1,p2);
16
17 }
运行结果:
p1=0x8784008 p2=0x8784020
p1= 0x8784038p2=0x8784020
由结果可以看出p1地址和源地址不同。此时,系统会自动在堆上开辟新的内存空间,并把原空间的内容拷贝到新的空间,并释放旧的空间,返回新空间首地址;
而p2由于在原空间上扩张的空间能在内存上得到,可以直接扩充,返回原地址。
0 0
- c语言中的动态内存分配~
- C语言中的动态内存分配函数
- c语言中的动态内存分配
- C语言中的动态内存分配函数
- c语言中的动态内存分配
- C语言中的动态内存分配详解
- C语言中的动态内存分配
- C语言中的动态内存分配
- C语言中的动态内存分配
- C语言动态内存分配
- C语言动态内存分配
- C语言动态内存分配
- C语言 动态内存分配
- C语言动态内存分配
- c语言:动态内存分配
- C语言-动态内存分配
- c语言-动态内存分配
- C语言动态内存分配
- Hana的java的jdbc连接方法
- 2013年软件设计师考试知识结构(二)
- UML 用例的粒度
- 安装JDK出现gzip: stdin: not in gzip format的原因
- javascript面向对象编程(五)
- c语言中的动态内存分配
- 关于区域医疗流程开发的思考
- 2013年软件设计师考试知识结构(三)
- C#操作Excel(创建、打开、读写、保存)几种方法的总结
- 时间转换工具/时间和13位毫秒转换软件
- 2013年软件设计师考试知识结构(四)
- 在Oracle中查询表的大小和表空间的大小 .
- Linux命令大全
- new后delete出现堆错误