一、C語言的內存結構
高地址 |
命令行參數區(命令行參數&環境變量) |
|
向下增加 |
棧區(內存空間有限,無需申請釋放),存放局部變量 |
|
向上增加 |
堆區(內存空間大,須要申請釋放) |
|
... |
數據區 |
未初始化變量區(全局、靜態) |
... |
數據區 |
已初始化變兩區(全局、靜態) |
... |
數據區 |
字符串常量區 |
低地址 |
代碼區 |
字符串常量區 |
二、分配內存
//分配內存
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);
三、測試
#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;
}