【发布时间】:2017-11-10 07:43:45
【问题描述】:
我在分配大尺寸的动态数组时遇到了段错误。
作为一个具体的例子,下面的代码会导致一个段错误。
int max = 1399469912;
int *arr = (int*) malloc((max+1) * sizeof(int));
arr[0] = 1;
但是,如果我将 max 替换为更小的值(例如 5),则不会出现段错误。
为什么会这样?或者,是否有其他解决方案可以达到相同的效果?我需要一个动态分配的大数组。
谢谢
【问题讨论】:
-
首先,should you really cast the result of
malloc?其次,如果malloc调用失败并返回一个空指针怎么办?您需要为此检查。 -
A 代表野心。 A 也是分配。尝试分配 5.6 GB 是一个相当雄心勃勃的分配。
-
如果算术是使用 64 位数字完成的,您需要大约 5 GiB 的内存。你的系统允许你分配那么多吗?在使用它之前,您必须检查来自
malloc()的返回值。这并不总是足够的(Linux 和 OOM — 内存不足 — 杀手),但它是必要的。 -
我预感 OP 正试图在 32 位操作系统上执行此操作。
标签: c arrays segmentation-fault malloc