c - C 中的段错误

标签 c

<分区>

#include <stdio.h>

int main()
{
    int n[100000];
    int t,q;
    int i,j;
    char s[3][100000];
    char qstr[3][200][100000];
    printf("Success\n");
}

在上面的代码中,qstr 的大小约为 57.22 MiB。当仍有超过 1 GiB 的空闲内存可用时,为什么会出现段错误? 如果我将 qstr 的声明更改为 qstr[3][200][10000] 程序执行起来没有问题,实际上会打印“成功”,然后退出.在这种情况下,“qstr”仅占用约 5.7 MiB。

我有两个问题:

  1. 我怎么知道限制?

  2. 鉴于我有更多可用内存,我该如何利用它?

最佳答案

答案是筹码量。有两种内存:堆和栈。

数组在栈中分配。您现在可以使用 ulimit -a 命令来限制。在我的系统上,我得到 stack size (kbytes, -s) 8192,所以最多 8Mb。你可能也有同样的感受。

如果你想在堆中分配,你需要使用malloc、指针等。

例如

char* qstr = malloc(3 * 200 * 100000);

关于c - C 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440962/

相关文章:

c - 嵌套 for 循环不迭代

c - 如何编写使用#ifdef 的宏函数

c - 用++*ptr指向int数组并进入无限循环

一个对象可以有多个有效类型吗?

c - 从 UART 读取数据时停止程序

c - error : conflicting types, 错误:形参2的类型不完整

c - 通过 TCP/IP 套接字发送文件(网络服务器)

c - 在同一个程序中混合 C 和 D 代码?

c - 从字符串中获取整数

c - 使用信号量时 Sleep() 被忽略