为什么这段代码

#include <stdio.h>

int main(void) {
    char big_array[10000000000];
    printf("%d", sizeof(big_array));
    return 0;
}

打印输出为

1410065408

而不是10000000000美元?

如果原因是堆栈内存不够大,那么在什么时候会出现运行时错误,而不是分配更小的内存?

推荐答案

打开警告!你应该得到一个警告,%d不匹配你给它的size_t参数.格式应该是"%zu\n".你得到的14%d65408是%d0000000模232,即截断为32位.

如果您真的try 对该数组进行use操作,它很可能会崩溃.(实际上,编译器正在优化未使用的array.)在堆栈上分配这些数组太多了.对于这么大的东西,你需要用malloc()美元.

C++相关问答推荐

如何解决C中的严格别名?

GCC引发不明确的诊断消息

为什么sscanf不能正确地从这个字符串格式中提取所有数字?

X86/x64上的SIGSEGV,由于原始内存访问和C中的DS寄存器之间的冲突,在Linux上用TCC编译为JIT引擎

如何使用C for Linux和Windows的标准输入与gdb/mi进行通信?

如何用c语言修改shadow文件hash部分(编程)?

==284==错误:AddressSaniizer:堆栈缓冲区下溢

S在本文中的价值观到底出了什么问题?

添加函数会 destruct 嵌入式C代码(无IDE)

可变宏不能编译

C11/C17标准允许编译器清除复合文字内存吗?

为什么编译器不能简单地将数据从EDI转移到EAX?

赋值两侧的后置增量,字符指针

';malloc():损坏的顶部大小';分配超过20万整数后

在哪里可以找到叮当返回码的含义?

10 个字节对于这个 C 程序返回后跳行的能力有什么意义

UEFI 应用程序中的计时器回调仅在 AMI BIOS 中挂起

当循环变量在溢出时未定义时,可以进行哪些优化?

段错误try 访问静态字符串,但仅有时取决于构建环境

如何确保 gcc + libc 对于多字节字符串使用 UTF-8,对于 wchar_t 使用 UTF-32?