2014-01-13 30 views
0

我想在堆栈上创建一个在运行时大小不同的数组。据我所知,这是在C++中总是非法的:堆栈上的非静态大小的数组

void local_array(unsigned int i) { 
    int arr[i]; 
} 

然而,也可以使用递归栈上动态分配内存。有没有不同的方式来完成这个,而不使用递归?如果不是,那么阻止上述示例被实现的技术限制是什么?

+3

@Blacktempel的std ::矢量在堆上分配内存。 – NmdMystery

+0

我不知道你在做什么,我也不确定你是否知道。在B中,除非不在堆栈中(arr!= null),否则堆栈中始终有一个1个元素的数组。 – aalku

+0

我很好奇,为什么你需要使用这样一个复杂的方式有一个动态数组...... – JBL

回答

2

没有技术限制。

你可以在C++ 14中做到这一点,它已经在叮当& gcc最新版本中实现。

void test(int n) 
{ 
    int a[n]; //ok now 
    cout << a[0] << endl; //output a random value on stack! 
} 
+0

这么晚才被接受的理由是什么? – NmdMystery

+0

除了未定义的不确定数据评估行为(这在评论中得到确认)之外,这是正确的。 – WhozCraig

+0

@NmdMystery原因是,C++得到了向量,没有理由使用栈动态数组。最近它被接受为标准,主要是为了兼容最新的C语言标准C11。由于C没有矢量,因此C有动力,并且它被接受为C11。 – user534498