为什么这段代码
#include <stdio.h>
int main(void) {
char big_array[10000000000];
printf("%d", sizeof(big_array));
return 0;
}
将输出打印为
1410065408
而不是10000000000?
如果原因是由于堆栈内存不够大,那么什么时候会出现运行时错误而不是分配较小的内存?
打开警告!您应该收到一条警告,指出
%d
与您提供的 size_t
参数不匹配。格式应为 "%zu\n"
。
如果您确实尝试使用该数组,它可能会崩溃。这对于在堆栈上分配来说太多了。对于这么大的东西,您需要使用
malloc()
。