在 C 中创建大型数组

标签 c arrays

我的问题是关于C语言的。 我必须创建一个包含大约 200 万个元素的大数组,但计算机给出了“段错误(核心转储)”错误。我只想说:

int integer_array[2000000];
float float_array[2000000];

我确信这与分配给数组的内存有关,但我想不出正确的解决方案。

最佳答案

通常你需要在堆上动态创建这样一个数组。

int *integer_array = (int*)malloc(2000000 * sizeof(int));
float *float_array = (float*)malloc(2000000 * sizeof(float));

数组可能对于堆栈分配来说太大了,例如如果不是全局使用,而是在函数内部使用。

int main () {
    int a[200000000]; /* => SEGV */
    a[0]=0;
}

最简单的修复方法,将数组移到外面:

int a[200000000];
int main () {
    a[0]=0;
}

你也可以声明它是静态的:

int main () {
    static int a[200000000];
    a[0]=0;
}

请注意,堆栈大小取决于系统。可以用 ulimit 改变它。

关于在 C 中创建大型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43015080/

相关文章:

Cygwin/Cygserver 共享内存

c - 尝试在 C 中分配二维数组时出错

c - 为什么我的 const 数组存储在堆栈而不是文本部分?

android - 使用 volley Json 获取空数组 [] 响应

python - 检测命名管道的关闭

c++ - 运行 UNIX 应用程序的堆栈跟踪

c - 如何访问 Rust 中的 C 常量?

javascript - 按值查找数组中的对象并更新整个对象

javascript - 从嵌套对象中并行数组的属性获取总计

c++ - 将 [char] 变量转换为 [int],然后再转换回 [char]