免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2997 | 回复: 5
打印 上一主题 下一主题

变量长度数组??在堆还是栈中分配的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-17 08:44 |只看该作者 |倒序浏览
看设备驱动开发详解的时候,愕然发现原来有变量长度数组这回事,于是我就试了一下,发现真的可以,代码如下(我用GCC4.3.3编译通过 )

  1. #include<stdio.h>
  2. int main (int argc, char** argv)
  3. {
  4.         int i;
  5.         int n=0;
  6.         char buf[n];

  7.         printf("the length of array is ");
  8.         scanf("%d",&n);

  9.         for (i = 0; i < n; i++) {
  10.                 buf[i]=i;
  11.         }

  12.         for (i = 0; i < n; i++) {
  13.                 printf("%d\n",buf[i]);
  14.         }
  15. }
复制代码
但是不知道其是在哪里分配?在Linux下有什么办法知道呢?

论坛徽章:
0
2 [报告]
发表于 2011-09-17 20:14 |只看该作者
GUN C 是可以这样用。 技术细节不清楚。
但是 按一般理解 ,buf是指针,可以访问它之后的地址啊。
看到过数组越界问题, 变量i 正好在 数组之后。
用GDB 看了下 , buf 地址为 0xbffff330   i 地址为0xbffff34c。 这不是堆吗!

论坛徽章:
0
3 [报告]
发表于 2011-09-17 20:27 |只看该作者
n 的地址 为 0xbffff340 , 我把n 值设大, 到 i =16时 n 被赋值为 16了,for循环终止了。
这个程序是有问题的哦。
应该找 GNU 文档来读。你搞懂这个了,记得回我贴。

论坛徽章:
0
4 [报告]
发表于 2011-09-17 20:33 |只看该作者
scanf("%d",&n);
char buf[n];

我看到一个程序 是这样的,试过了,是这样的。别乱用哦。

论坛徽章:
0
5 [报告]
发表于 2011-09-17 20:36 |只看该作者
一本书上 是这样的:
int main( int argc, char *charv[])
{
       int i, n = argc;
       double x[n];
       for(i = 0; i  < n; i++)
              x[i] = i;
       return 0;
}

论坛徽章:
0
6 [报告]
发表于 2011-09-18 14:04 |只看该作者
恩恩 我也看到这个例子,在【驱动程序开发详解】中的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP