malloc与直接声明变量的区别

/**
* 以下操作都以声明数组为例 !
* 
* 一 使用形式的区别
*	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创建结构体时,作用范围会比直接声明的数组大。 
*/ 


  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值