【发布时间】:2016-09-03 09:50:46
【问题描述】:
示例c代码:
#include <stdio.h>
int main (int argc, char** args) {
int k = 8;
int sendbuffer[k]; // VLA
for (int n = 0; n < k; n++) {
printf("sendbuffer[%i]: %i \n", n, sendbuffer[n]);
}
return 0;
}
示例输出:
sendbuffer[0]: 1
sendbuffer[1]: 0
sendbuffer[2]: 1583871280
sendbuffer[3]: 32767
sendbuffer[4]: 22544384
sendbuffer[5]: 1
sendbuffer[6]: 1713234504
sendbuffer[7]: 32767
sendbuffer[] 中的数字是从哪里来的? 为什么再次运行代码时只有 sendbuffer[2,4,6] 会发生变化?
我在 OSX El Capitan 上使用 clang 编译器(使用 gcc example.c 编译)
Apple LLVM 版本 7.3.0 (clang-703.0.31)
目标:x86_64-apple-darwin15.4.0
线程模型:posix
如果与其他编译器/操作系统有不同的行为,我也想听听这些情况。
【问题讨论】:
-
未定义的行为。这些值是内存中发生的任何内容。
-
这不是 VLA 特有的。