【发布时间】:2014-05-10 18:14:58
【问题描述】:
我两次问了同样的问题(见这里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++。
【问题讨论】:
-
32 位或 64 位操作系统和程序?
-
If not then should I study C++可以分配的内存大小与选择的语言无关... -
这很像X-Y Problem。为什么你认为你需要分配这么多难以置信的内存?
-
只发布整个问题,有人会为您解决,您可以提交它...(当我输入这样一个绝妙的想法时感觉有点错误:))...我怀疑是真实的任务是实现某种sparse matrix,但如果不知道您要在哪个站点上“解决”问题,就很难猜到。
-
如果您是为了在线比赛而这样做,我怀疑您正在尝试一些可怕的蛮力方法,并且可能有一个更有效的解决方案。
标签: c arrays memory memory-management