1、malloc
在堆内存中分配指定的空间,需要手动释放。
#include <stdlib.h>
int main(){
int *p = malloc(sizeof(int));
free(p);
return 0;
}
2、calloc
calloc和malloc很类似,但是会默认将指针的值进行初始化
int main(){
#define ARR_LEN 3
int *p = calloc(ARR_LEN, sizeof(int));
PRINT_INT_ARRAY(p,ARR_LEN);
free(p);
return 0;
}
运行结果如下:
3、realloc
可以使已分配的内存变长
int main(){
#define ARR_LEN 3
int *p = calloc(ARR_LEN, sizeof(int));
PRINT_INT_ARRAY(p,ARR_LEN);
for(int i=0; i<ARR_LEN; i++){
p[i] = i;
}
PRINT_INT_ARRAY(p, ARR_LEN);
realloc(p, ARR_LEN * 2 * sizeof(int));
PRINT_INT_ARRAY(p,ARR_LEN * 2);
free(p);
return 0;
}
4、注意
在分配内存的时候极有可能会分配失败,在写demo时内存肯定是充足的,但是个别情况比如写嵌入式程序时,内存有限。因此最好是将返回值做一个判断。
#define ARR_LEN 3
int *p = calloc(ARR_LEN, sizeof(int));
if(p == NULL){
}
5、常见分配内存指针使用错误
1、忘记使用完毕后释放内存 2、使用了已经释放的内存 3、使用了超出边界的内存 4、给指针分配内存后,改变指针的内存指向,导致无法正常释放
6、动态内存使用建议
1、避免修改指向已分配的内存指针 2、对于free之后的指针主动置为NULL 3、避免将过多的指针指向动态分配的内存 4、动态内存遵从谁分配谁释放的原则
|