【发布时间】:2019-02-28 22:46:26
【问题描述】:
我正在做老师要求的练习。这项工作需要评估大量值(准确地说是 1 000 000 000),当我尝试在 PosFez 数组中添加值时,程序会出错。
我想我必须使用malloc,但我前段时间学过这些东西,但我不记得该怎么做。我也认为尝试直接评估值会起作用,但我认为我也需要保存数据的唯一方法
#include <stdio.h>
int n,m,q;
int main(){
scanf("%d %d",&n,&m);
int PosFez[m];
for(int i = 0; i < m; i++){
scanf("%d",&PosFez[i]);
}
int Postos[n];
for(int i = 0; i < n; i++){
Postos[i] = 0;
}
scanf("%d",&q);
int p[q];
for(int i = 0; i<q;i++){
scanf("%d",&p[i]);
}
for(int i = 0; i < m; i++){
for(int j = 0; j < PosFez[i]; j++){
Postos[j]++;
}
}
for(int i=0; i<q;i++){
printf("%d\n",Postos[PosFez[i]-1]);
}
}
【问题讨论】:
-
这很可能会破坏堆栈:使用
malloc分配它。有些编译器甚至不会这样做:我的 MSVC 只为整个程序提供了大约 2Gb 的内存。 -
我真的不记得该怎么做。如果你能帮助我
-
将
int PosFez[m];行更改为int *PosFez = malloc(m * sizeof(int));,并且在完成数组后不要忘记执行free(PosFez);。就此而言,如果您希望n和q也很大,请对Postos和p执行相同操作。 -
@MikeHolt 谢谢,我需要整个程序的数据,所以我应该在结束前做
free(PosFez);对吗? -
@GuilhermeSilva 如果您在没有明确释放内存的情况下退出程序,它将与它使用的其余内存一起被释放