malloc与直接声明变量的区别

来源:互联网 发布:中世纪2王国战役优化9 编辑:程序博客网 时间:2024/05/22 00:05

/*** 以下操作都以声明数组为例 !* * 一 使用形式的区别*malloc的使用: * int *a = (int *)malloc(sizeof(int)*N); *直接声明: *int a[N]; **二 分配方式的区别*malloc动态分配----内存是在堆区分配的,分配内存时需要在堆区分配,耗时较大,因为内存管理操作的缘故,分配的内存需要手动析构;*int a[N] 静态分配 ----存储区是在栈里分配的,耗时相对小,因为该操作只需要移动栈指针就行,分配的内存自动析构。** 三 释放*malloc使用完不调用free会引起内存泄漏*int a[N]--静态分配--栈上分配的内存系统自动释放** 四 作用范围---------------见示例代码*malloc 全局*int a[N] 局部** 五 总结*如果变量有局部性、知道其大小、且存储区无须变动时,使用静态分配,否则动态分配**/#include "stdio.h"#include "malloc.h"#define N 5//malloc申请内存 int *function1(){int *a=(int *)malloc(sizeof(int)*N);for(int i=0;i<N;i++){a[i]=i+1;}return a;}//直接声明int *function2() {int a[N];for(int i=0;i<N;i++){a[i]=i+1;}return a;}int main(){//获取函数中申请的数组地址--malloc方法 int *a=function1();//打印结果 for(int i=0;i<N;i++){printf("%4d",a[i]);// 1,2,3,4,5 } free(a); //注意释放!!!printf("\n");//获取函数中申请的数组地址--直接声明 int *b=function2() ;//打印结果 for(int i=0;i<N;i++){printf("%4d",b[i]);//1   2635694020085987201439844825   //内存已经被释放 } printf("\n");}//解决了我的困惑:/** *为什么声明在结构体中的数组,通过malloc创建结构体时,作用范围会比直接声明的数组大。 */ 


原创粉丝点击