创建大型二维数组

标签 c arrays

我已声明以下内容:

  1. long long int *a[100000]//全局声明

  2. a[i]的动态声明:

    a[i]=(long long int*)calloc(sizeof(long long int),100000);
    
    for(i=0;i<100000;i++) {
       for(j=0;j<100000;j++)
           printf("%lld ",a[i][j]);
           printf("\n");
    }
    

经过循环后,我的程序显示段错误

因为我得到了一些测试用例的正确答案和其他一些测试用例的段错误,这意味着我没有访问非法内存。 我认为问题在于声明如此大尺寸的 long long int 数组。

最佳答案

注意二维数组的定义及其元素的分配:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    long long int* a[10][10]; //AS I MENTIONED IN THE COMMENT UNDER THE QUESTION
    int i, j;
    for(i=0;i<10;i++) {
       for(j=0;j<10;j++) {
           a[i][j] = calloc(sizeof(long long int),10);
       }
    }
    for(i=0;i<10;i++) {
       for(j=0;j<10;j++)
           printf("%lld ",a[i][j]);
           printf("\n");
    }
    return 0;
}

还要注意,根据您的版本,您将尝试分配 100000x100000x100000 字节的 RAM(四万亿字节??)。

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

相关文章:

c++ - 它怎么可能成为竞争条件。或者我的代码有问题

sprintf 中字符串内的 C 宏

c - 关于覆盖 linux 内核宏的一件有趣的事情

c - 当我从 atexit 处理程序中调用 exit 时,为什么没有出现无限循环?

cmake 在 OS X 上找不到 gl.h

java - 二维数组数据为空?

php - 如何检查数据是否已存在然后从数组中随机生成新数据

arrays - 两个元素之间的最大差等于求解最大子数组?

javascript - 从for()移到map()-无法绕开它

javascript - 将 Json 对象数组转换为 angularjs 中的属性值列表