- 主题:[讨论][求助]c++什么时候允许用变量定义数组的?为什么?
代码如下,编译正常;
int n;
cin >> n;
int arr[n];
什么时候允许这样的?古老的时候编译器会做检查,要求n必须是常量。
做了下测试,这个内存还分配在栈内存中,但n等于1KW的时候,就栈溢出了。而用new,完全不会溢出。
为什么要支持这样的特性?
--
修改:helloabc FROM 116.213.168.*
FROM 116.213.168.*
C支持吗?
这个我倒没了解过。
记得以前c++编辑器是编译不过去的。
【 在 z16166 的大作中提到: 】
: C的吧。部分C++编译器也支持C的这个东西。
: 栈上分配大尺寸的东西是找死。特别地,如果数组的尺寸是外部可控的,可以实现精准溢出,容易导致安全漏洞。
--
FROM 116.213.168.*
栈内存有限,这么搞很容易栈溢出。
想不通为什么要支持这个特性?
【 在 laser2000 的大作中提到: 】
: C99支持
: C++标准没有
: 但gcc支持
--
FROM 116.213.168.*
另外GCC是什么时候支持的?
以前没发现会支持这个。
【 在 laser2000 的大作中提到: 】
: C99支持
: C++标准没有
: 但gcc支持
--
FROM 116.213.168.*
是的,直接进程挂掉了。
【 在 easior 的大作中提到: 】
: 现代操作系统都工作在内存保护模式
: 大多数情况下,内存耗尽前都会先杀死程序
--
FROM 116.213.168.*
可以理解。
C就是各种奇技淫巧,工程师自己把控稳定性。
【 在 z16166 的大作中提到: 】
: 小数组在栈上快
: 大数组必须分配在堆上
: 所以要用这个特性的话可以规定一个尺寸上限(kernel代码的话直接禁止使用),防止滥用成灾
: ...................
--
FROM 116.213.168.*