linux环境编程系统内存分配问题
#include "csapp.h"
void main()
{
int *array,i,n;
double *array1,*array2;
printf("请输入数组大小n");
scanf("%d",&n);
array=malloc(n*sizeof(int));
for(i=0;i<n;i++)
scanf("%d",&array[i]);
printf("第一次分配的内存地址:n");
for(i=0;i<n;i++)
printf("%pn",&array[i]);
printf("请输入double1数组大小n");
scanf("%d",&n);
array1=malloc(n*sizeof(double));
for(i=0;i<n;i++)
scanf("%lf",&array1[i]);
printf("分配double1的内存地址:n");
for(i=0;i<n;i++)
printf("%pn",&array1[i]);
printf("请输入double2数组大小n");
scanf("%d",&n);
array2=malloc(n*sizeof(double));
for(i=0;i<n;i++)
scanf("%lf",&array2[i]);
printf("分配double2的内存地址:n");
for(i=0;i<n;i++)
printf("%pn",&array2[i]);
free(array1);
printf("请再次输入数组大小n");
scanf("%d",&n);
array=malloc(n*sizeof(int));
for(i=0;i<n;i++)
scanf("%d",&array[i]);
printf("第二次分配的内存地址:n");
for(i=0;i<n;i++)
printf("%pn",&array[i]);
exit(0);
}
代码如上所示,运行结果如下所示:
zzw@zzw-ThinkPad-Edge-E430c:~/doc_main/CProgram/Exercise/Demo21$ ./main5.o
请输入数组大小
2
13 21
第一次分配的内存地址:
0x1217010
0x1217014
请输入double1数组大小
3
13
21
41
分配double1的内存地址:
0x1217030
0x1217038
0x1217040
请输入double2数组大小
2
34
42
分配double2的内存地址:
0x1217050
0x1217058
请再次输入数组大小
3
13
42
13
第二次分配的内存地址:
0x1217030
0x1217034
0x1217038
请问一下,为什么第一次分配整型内存后,第二次分配double内存时,是从0x1217030开始的呢?为什么中间有那么多内存碎片?
如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

发布评论
需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。