我问了同样的问题两次(参见此处 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/