c - 检测到堆栈溢出时强制 gcc 编译

标签 c gcc stack stack-overflow gcc-warning

我如何强制 gcc 编译一个程序,在该程序中我声明了一个比我的 ram 大的无符号整数数组 - 而没有收到警告警告:“表达式中的整数溢出”?

例如。我有 8gb 的 ram,我想声明一个 8.5gb 的数组。

编辑:

谢谢大家,我发现问题不在于数据类型,而在于一些预处理器。虽然我花了很长时间。 :) 我写了

#define GIBI 1073741824
#define ARRAYSIZE 2*GIBI

显然编译器不喜欢这样。

最佳答案

integer overflow in expression不是堆栈溢出,这意味着 GCC 检测到您的表达式的结果导致您分配给它的左值出现整数溢出。例如,如果您尝试 malloc类似 INT_MAX * 2 的东西,该表达式将导致积分溢出。如果将其转换为 size_t ,你应该没有警告:

void *myvar = malloc((size_t) INT_MAX * 2);

size_t是,当然,依赖于平台,如果你不能表示你想要在 sizeof(size_t) 中分配的 block 的大小,你可能也会溢出。位。基本上,确保您使用的类型能够表示您要分配的内存量,并且它与 size_t 兼容。 (因为这就是 malloc() 所期望的,根据 stdlib.h )。

关于c - 检测到堆栈溢出时强制 gcc 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443807/

相关文章:

c - 如何从 char 数组中检索 n 个字符

c++ - 允许 GCC 特定的 undefined reference

java - 什么数据结构将在 LIFO 中保存有界的项目堆栈?

windows - Windows x86 堆栈中的堆栈是如何定义的?

c++ - 确定 posix pthread 的堆栈使用情况?

c - 没有 dlsym 的 Linux 中的函数插入

c++ - 复制整数位的最快方法

c - 为什么我在全新的套接字上收到 EPOLLHUP 事件

c - 程序在接受 C 中输入的第二个字符串之前运行

c - DWARF 行表中的源列号