我想知道以下代码中的问题。这用于首先打开一个大小为 800Mb 的文件以填充 name 变量,然后用于通过从另一个文件读取索引来访问存储在其中的数据。问题是,在读取并填充数组名称后,从它访问任何元素都会出现段错误。当在较小的数据量上测试相同的代码时,它可以工作。可能是什么原因?我运行它的硬件是英特尔 i5 芯片上的 4gb RAM,32 位 linux 版本。
#include <stdio.h>
#define MAXINT 61578414
int main(int argc,char** argv){
printf("Starting \n");
FILE* fp1 = fopen(argv[1],"r");
FILE* fp2 = fopen(argv[2],"r");
char** name;
name = (char**)malloc(MAXINT*sizeof(char*));
char* tname;
int i = 0;
int tmp1;
//reading to fill in name
while(i < MAXINT){
name[i] = (char*)malloc(20);
fscanf(fp1,"%d%s",&tmp1,name[i]);
i++;
}
//accessing elements from name
int i1,i2;
while(!feof(fp2)){
fscanf(fp2,"%d%d",&i1,&i2);
fprintf(stdout,"%s %s\n",*(name+i1),*(name+i2));
}
}