| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 347 人关注过本帖
标题:变长数组要不要free
只看楼主 加入收藏
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:8 
变长数组要不要free
看书上说可以C99以后可以用变长数组,
就是
int n;
char num[n];
但是这么的话不就和指针乱指一样了,一开始n很小后来又把n变得很大然后往数组里存储不就会出问题吗?
2013-12-04 23:30
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
肯定会有维护机制的,否则乱套了

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-12-05 07:12
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 2楼 pauljames
我看的是c prime plus那本书,但是里面没有讲需要维护,关于变长数组这个说法也是第一次在里面看见
2013-12-05 08:21
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
不会乱的
2013-12-05 09:16
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:0 
应该不会乱,既然提了  就会有解决的办法。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-05 09:26
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:20 
百度上搜到的,没时间看C99查证,反正我是不会用这个东西的:
变长数组(variable-length array),也简称VLA。
C语言中,直到C99标准出现之前,声明数组时在方括号内只能使用整数常量表达式。而C99做了很大改进,允许数组的[ ]中的值是整形变量或是整形表达式。这就解释了下面的情况:
int n;
scanf ("%d", &n);
int array[n];
虽然n确实是需要运行时动态确定的变量,但是在C99中,以这种变量作为数组大小的形式已经是允许的了。这样的数组就被称之为“变长数组”。
注意:变长数组是指用整形变量或表达式声明或定义的数组,而不是说数组的长度会随时变化,变长数组在其生存期内的长度同样是固定的。
2使用引例

如下面的例子:
........
fun (10);
.........
void fun(int n)
{
int vla[n];
n += 10;
printf ("vla takes %d bytes/n", sizeof vla);
}
执行的结果是40。虽然n的值在声明了数组vla之后发生了变化,但是vla不会因此而改变大小,因为变长数组一旦被声明,其大小就会保持不变直到生命期结束。

总有那身价贱的人给作业贴回复完整的代码
2013-12-05 10:00
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
malloc的内存才需要free,变长数组应该不用free。有兴趣可以把变长数组的地址打印出来和局部变量地址,malloc的内存地址,全局变量的地址比较一下看变长数组是分配在堆上还是栈上?

总有那身价贱的人给作业贴回复完整的代码
2013-12-05 10:04
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 7楼 embed_xuel
这么说就清楚了,那其实只是改变了给定数组长度的时间,可以再程序开始以后再给定数组长度。
2013-12-05 21:07
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
变成数组,说白了还是数组,只是长度可以指定,一旦指定后就不可改变

小小战士,战士中的战斗机!
2013-12-05 22:57
快速回复:变长数组要不要free
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024433 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved