堆中分配的内存的方向
来源:互联网 发布:适合男生用的面膜知乎 编辑:程序博客网 时间:2024/06/07 07:14
今天写程序的时候遇到了一个这样的问题,源程序比较复杂,替换一个小程序思考了一下:
这段代码就是简单的动态申请一维数组,然后数组赋值那部分改一下:
结果是这样的:
#include <stdio.h>#include <stdlib.h>#include <malloc.h>void main(){ int *a, n = 10, i; if((a = (int*)malloc(n*sizeof(int)))==NULL) { printf("the memory is in lack"); exit(0); } for(i = 0; i<n; i++) a[i] = i+1; for(i = 0; i<n; i++) printf("%d ",a[i]); free(a);}
这段代码就是简单的动态申请一维数组,然后数组赋值那部分改一下:
while(i < n) *a++ = i++;最后再打印,发现结果不对,为什么呢?思考了一下,好像在堆中分配内存是向相反方向增加的,所以我们打印函数写的不对
验证一下看看:
while(i < n) { *a = i++; printf("%p\n",a); a++; }//栈中分配的特殊性 a--;打印出来:
printf("\n"); for(i = 0; i<n; i++) { printf("%p\n",&a[i]); printf("%d ",a[i]); }
结果是这样的:
发现我们分配和寻址是按照相反的方向进行的,所以以后在处理堆上分配内存的操作时一定要小心。。。。
- 堆中分配的内存的方向
- 内存中堆和栈的分配
- 托管堆的内存分配
- 内存的堆分配和栈分配
- 内存的堆分配和栈分配
- 内存的堆分配和栈分配
- 内存的堆分配和栈分配
- 内存的堆分配和栈分配
- C中堆与栈的内存分配机制
- JAVA中内存分配策略里的堆与栈
- 内存分配中堆和栈的区别
- C中 malloc()分配堆内存实际的大小
- 内存分配中堆与栈的区别
- C中 malloc()分配堆内存实际的大小
- 内存分配中堆和栈的区别
- 堆内存和栈内存的分配
- 程序的内存分配 栈和堆
- 程序的内存分配 堆和栈
- hdoj 4551 生日猜猜猜
- python with 语句
- 澄清P问题、NP问题、NPC问题的概念
- c++学习
- 01--工具栏的使用
- 堆中分配的内存的方向
- Windows ATL
- 动态规划 HDU 2546 饭卡
- 苹果开发sdk库,block学习
- android4.1.2inputmethodframework结构分析
- Executors工厂类创建线程池的底层实现
- 插入xml文件到mysql
- 驾驭大数据阅读手记之技术、流程及方法
- Linux kernel 中的per_cpu宏