次のコードの問題を知りたかったのです。これは、最初にサイズ 800Mb のファイルを開いて name 変数を入力するために使用され、後で別のファイルからインデックスを読み取ることによって、そこに格納されているデータにアクセスするために使用されます。問題は、配列名を読み取って入力した後、そこから任意の要素にアクセスすると、seg fault が発生することです。小さいデータ サイズで同じコードをテストすると、うまくいきました。その理由は何ですか?これを実行しているハードウェアは、Intel i5 チップ上の 4 GB 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));
}
}