【问题标题】:g++ variable size array no warning?g ++可变大小数组没有警告?
【发布时间】:2014-10-21 05:51:53
【问题描述】:
int a;
cin >> a;
int ints[a];

为什么编译时不会抛出任何警告?我怎么知道这个数组到底是在用堆还是栈?

g++ -std=c++11 -Wall *.cpp -o main

【问题讨论】:

  • 我怎么知道这个数组的东西实际上是在使用堆还是堆栈? 很简单,如果你没有new(或malloc)那么它就是在堆栈上。
  • 不正确。我在这里所做的实际上是在不告诉我的情况下在堆中分配内存。因为我使用的是可变大小的数组,它不知道构建堆栈时的大小。
  • 嗯,这是一种观点,然后你的编译器的文档又声称:gcc.gnu.org/onlinedocs/gcc/Variable-Length.html,另外看看allocadocumentation 在运行时在堆栈中分配空间。
  • 虽然我确定您在实践中是对的,但要迂腐,GCC 文档在哪里说明了结果数组的存储位置?当然,存储 duration 是自动的,但这与位置正交。它可能会在现实中出现,但鉴于这是非标准行为,我认为没有必要这样做。再说一次,由于人们经常混淆这些概念,OP可能会或可能不会关心其中一个。 :P

标签: c++ memory g++ heap-memory


【解决方案1】:

ISO C++ 不允许使用可变长度数组g++ 很高兴地告诉你,如果你通过传递-pedantic 标志来增加它的严格性。

使用-pedantic 将发出有关违反标准的警告。如果您希望g++ 发出错误并因此拒绝编译;使用-pedantic-errors


g++ -Wall -pedantic -std=c++11 apa.cpp

apa.cpp: In function ‘int main(int, char**)’:
apa.cpp:8:13: warning: ISO C++ forbids variable length array ‘ints’ [-Wvla]
   int ints[a];
             ^
apa.cpp:8:7: warning: unused variable ‘ints’ [-Wunused-variable]
   int ints[a];
       ^

【讨论】:

    猜你喜欢
    • 2014-01-29
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多