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创建结构体时,作用范围会比直接声明的数组大。 */
阅读全文
0 0
- malloc与直接声明变量的区别
- 定义变量 与 声明变量 的区别
- 变量的定义与声明的区别
- 变量的定义与声明的区别
- 变量定义与声明的区别
- 变量定义与声明的区别
- 变量定义与声明的区别
- 变量定义与声明的区别
- 变量定义与声明的区别
- 变量的声明与定义以及区别
- 变量定义与声明的区别
- 变量定义与声明的区别
- malloc 与申明变量区别
- javascript var声明变量与不声明的区别
- C++与Java变量声明与赋值的区别
- cpp中变量的声明与定义的区别
- 变量的定义与声明的区别(转)
- C++ 变量的声明与定义的区别
- Leetcode | Integer Break
- docker程序部署代码记录
- unity中c#与java相互调用
- [BZOJ4589]Hard Nim-快速沃尔什变换-动态规划
- Apple Tree (树形dp+背包)
- malloc与直接声明变量的区别
- 彩色图像的曲线灰度变化(伽马变换)
- C语言05
- Java内存模型与垃圾回收
- 17.11.19日报
- 球员题(查询+添加+排序)
- HTTP学习与Web服务器编程
- mysql id自动增加和时间戳
- 5. 最高的分数