私は次のことをしようとしています:コードがメイン関数を台無しにしないように関数を使用して整数データを含むテキスト ファイルを読み取り、データをメイン関数に解析します。
私のコードは次のようになります
void Readata(char* fname, int* n, int* TheArray){
int nn=0;
int anyInt=0;
ifstream InFile( fname );
if ( ! InFile.is_open() ) throw myErrHandler("Could not open input file");
InFile >> anyInt;
if ( ! InFile ) throw myErrHandler( "Could not read size of array" );
nn=anyInt;
(*n)=nn;
int* AnArray = (int*) calloc(nn,sizeof(int));
for(int i=0; i<nn; i++){
InFile >> anyInt;
if ( !InFile ) throw myErrHandler( "Could not read data" );
AnArray[i]=anyInt;
}
TheArray = AnArray;
}
そして、主な機能は次のようになります
int main(int argc, char **argv){
if ( argc < 2 ){
cerr << "Usage: " << argv[0] << " input file" << endl;
return 777;
}
int n;
int* TheArray;
ReadData(arg[1], &n, TheArray);
return 1;
}
私の問題は、メイン関数から TheArray にアクセスしようとすると、「セグメンテーション エラー (コア ダンプ)」というメッセージが表示されることです。明らかに、ReadData 関数が呼び出された後、"TheArray" ポインターで正しい場所を指していません。ReadData 関数でデータを画面に出力すると、AnArray と TheArray の両方が同じ (そして正しいもの) を指します。これを行う正しい方法は何ですか?