鱼C论坛

 找回密码
 立即注册
查看: 2266|回复: 9

[技术交流] 关于数组和malloc

[复制链接]
发表于 2016-3-17 11:13:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近比较困惑一个问题就是我们申请一个数组时,是否需要申请一个空间给他呢?

比如:

#define maxsize  100;

int array[maxsize];

array = (int*)malloc(maxsize);// 这句是否是必要的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-17 13:02:31 | 显示全部楼层
int array[maxsize]; 就已经在栈上分配空间了,malloc是在堆上分配,栈上的是自由变量,函数返回就销毁了,堆上的变量要手动释放
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-3-17 13:49:25 | 显示全部楼层
川本姨夫 发表于 2016-3-17 13:02
int array[maxsize]; 就已经在栈上分配空间了,malloc是在堆上分配,栈上的是自由变量,函数返回就销毁了, ...

一般来讲栈自由度小一些,还是想自己分配空间。栈没法控制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-17 14:46:01 | 显示全部楼层
川本姨夫 发表于 2016-3-17 13:02
int array[maxsize]; 就已经在栈上分配空间了,malloc是在堆上分配,栈上的是自由变量,函数返回就销毁了, ...

一般来讲栈自由度小一些,还是想自己分配空间。栈没法控制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-25 03:31:10 | 显示全部楼层
array = (int*)malloc(maxsize);// 这句是否是必要的?

不用讨论是否必要
因为 array不能写在赋值符号左边
这是一个Error
编译器根本不接受
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-26 09:30:58 | 显示全部楼层
求道于盲 发表于 2016-9-25 03:31
array = (int*)malloc(maxsize);// 这句是否是必要的?

不用讨论是否必要

malloc 分配的是堆。局部变量用的是栈

你是想表达这个意思吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-26 11:32:00 | 显示全部楼层
阁龙1427 发表于 2016-9-26 09:30
malloc 分配的是堆。局部变量用的是栈

你是想表达这个意思吧


array是数组
数组不能用 赋值运算符= 进行赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-26 13:12:29 | 显示全部楼层
静态数组,编译时,指定大小,分配在栈中。动态数组可以改变大小,分配堆内存,相对而言,动态数组用于中间量,静态用于长时间需要保持的量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-31 12:06:10 | 显示全部楼层
创建数组的时候   栈中已经分配 足够的空间了   局部变量存储在栈中

数组是自动释放的   而  malloc分配的内存在堆中  不自动释放
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-31 12:07:18 | 显示全部楼层
数组准确的说 也是个变量   只不过其存储范围是程序员可以控制的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 06:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表