1

我正在尝试声明一个方阵,但我得到的段错误值大于 1446 的行/列。我在“手动二进制搜索”中发现了这个值。

这是我的代码片段:

boolean matrix[vertex][vertex];
memset(matrix, 0, sizeof(matrizAdjacencia[0][0]) * vertex * vertex);

最初的运行试图声明 32768*32768 个位置。但它失败了,然后我开始修复低值,直到找到这个 1446 值。代码在 memset() 之前失败;

布尔类型只是一个

typedef enum {true, false} boolean;

运行附加gdb的程序时,产生的错误是:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5f3ff548
0x00007fff8e6a5fba in tzload ()

提前致谢,

4

1 回答 1

3

这可能是由于系统中的堆栈大小限制。ulimit -s在大多数 8MB 的系统中查看哪个。

因此,1446 * 1446 * 4几乎是8MB因为enum 的大小为 int。因此,您不能分配超过允许的堆栈大小。实际需要的内存32768 * 32768 * 4将近4GB。您可能可以使用 a bitmap,因为您正在处理boolean它减少了所需的内存。首先改变intto charreduce to4GB / 4 = 1GB和 from charto 位域减少到1GB / 8 = 128MB

更喜欢使用malloccalloc用于更大的内存块。

于 2013-09-16T11:29:18.793 回答