c - 使用malloc在c中分配大小为10^5 * 10^5的数组

标签 c arrays memory memory-management

我问了同样的问题两次(参见此处 Getting segmentation fault while using malloc )并改进了我的代码。但我无法为 m 和 n 的较大值分配内存。我的代码的核心是:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int i,j,n,m,p = 0 ;
    int sum[100000] = {0};

    scanf("%d%d%d",&n,&m,&p);

    /*for ( i = 0 ; i < n ; i++ )
    {
        for( j = 0 ; j < m ; j++ )
        {
            a[i][j] = j + 1 ;
        }
    }*/
    int **a = malloc( n * sizeof *a );
    for(i=0; i<n; i++)
    {
        a[i] = malloc( m * sizeof **a); 

           for(j=0; j<m; j++){
            a[i][j] = j + 1 ;

           }
       }



    while ( p-- )
    {
        //printf("I am in while loop\n");
        scanf("%d%d",&i,&j);
        {
            a[i-1][j-1] += 1 ;  
        }
    }

    /*for ( i = 0 ; i < n ; i++ )
    {
        for( j = 0 ; j < m ; j++ )
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }*/
    for ( i = 0 ; i < n ; i++ )
    {
        for( j = 0 ; j < m - 1; j++ )
        {
            p = a[i][j+1] - a[i][j];
            if ( p < 0 )
            {
                sum[i] = -1 ;
                break;
            }
            else
            {
                sum[i]+=p;
            }
            //printf("%d ",p);

        }
    }
    for ( i = 0 ; i < n ; i++ )
    {
        printf("%d\n",sum[i] );
    }

    return 0;
}

限制条件是: 1≤n、m、p≤10^5

对于较大的值,我仍然遇到运行时错误。我知道我一次分配 10 GB 内存,但这是问题的要求。我的问题是在C中是否可以一次分配这么多内存?如果可能的话请告诉我。如果没有的话我应该学习C++。

最佳答案

除非我误解了这个问题,否则您实际上需要的内存远不止 10GB,不是吗?你想要存储10^10个数组元素,每个元素都是一个指针的大小。在 64 位系统上,每个元素不是 8 个字节吗?您将需要 80GB 内存而不是 10GB?

关于c - 使用malloc在c中分配大小为10^5 * 10^5的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584664/

相关文章:

javascript - JavaScript 数据可以附加到 HTML 元素吗?

javascript - 在无状态组件中将 props id 绑定(bind)到 onClick

Android:在 Eclipse 中打开 .hprof 文件

c - 如何防止在初始化数组时过度使用程序堆栈内存?

python - 循环读取 XML 文件最终会导致内存错误

c - 服务器和客户端程序不发送或接收数据

c - 返回正确值但目标变量错误的 C 函数调用

c - getchar() 立即返回

c - 赋值运算符的重新定义

c++ OpenGL 段错误