1、C语言的内存结构
内存地址位置 |
程序存储区域 |
子区域 |
高地址 |
命令行参数区(命令行参数&环境变量) |
|
向下增长 |
栈区(内存空间有限,无需申请释放),存放局部变量 |
|
向上增长 |
堆区(内存空间大,需要申请释放) |
|
... |
数据区 |
未初始化变量区(全局、静态) |
... |
数据区 |
已初始化变两区(全局、静态) |
... |
数据区 |
字符串常量区 |
低地址 |
代码区 |
字符串常量区 |
2、分配内存
//分配内存
TYPE *p = (TYPE *)malloc(num*sizeof(TYPE));
memset(p, '\0', num*sizeof(TYPE));
//分配内存(默认填充0)
TYPE *p_array = (TYPE *)calloc(num, sizeof(TYPE));
//调整内存分配
TYPE *p1 = (TYPE *)malloc(num*sizeof(TYPE));
TYPE *p2 = realloc(p1, 2*num*sizeof(TYPE));
//释放内存
free(p);
3、测试
#include <stdio.h>
#include <memory.h>
#include <string.h>
#include <stdlib.h>
typedef struct Person{
char name[20];
int age;
}person;
int main(void){
person *p = (person *)malloc(10*sizeof(person));
memset(p, 0, 10*sizeof(person));
for (int i=0; i<10; i++){
strcpy(p[i].name,"Tom");
p[i].age = i+100;
}
for (int i=0; i<10; i++){
printf("*****************************\n");
printf("%s\n",p[i].name);
printf("%d\n",p[i].age);
person *pq;
pq = &p[i];
printf("%p\n",pq);
printf("*****************************\n");
}
free(p);
return 0;
}
文章来源: https://www.cnblogs.com/KevinGeorge/p/11059319.html
如有侵权请联系:admin#unsafe.sh