据我所理解,以下代码使用C++的一个非标准扩展生成变长数组。
int main()
{
int valone = rand();
int valtwo = rand();
int array[valone][valtwo];
// Printing size
cout << sizeof(array) << endl;
}
有没有办法检查它是在堆栈还是堆上生成的?维基百科这里的描述说,
gcc
在堆栈中生成相同的内容,但是当我尝试以上代码时,大多数情况下,数组大小似乎太大而无法适应堆栈,但它从未抱怨过。注意:此代码仅适用于gcc和clang,不适用于Visual Studio。
gcc
可能会将C99代码和C++代码视为同一种。 - R Sahuvaltwo
和array[0]
的地址。如果数组在堆栈上,它们应该是相邻的。如果在堆上,它们会有很大的不同。这不是100%可靠的,但大多数情况下都有效。 - Mikhail