アクセス違反の例外に問題があります。私はitkを使用していて、ファイルリーダーでファイルを読み取ります。
ThreeDImageFloatType* MyClass::loadImage(std::string filename){
const char* cfilename = filename.c_str();
fileReader = ImageFileReaderType::New();
fileReader->SetFileName(cfilename);
try{
fileReader->Update();
}catch( ... ) {
std::cerr << "failed to read file " << filename << std::endl;
}
CastFilterType::Pointer castFilter = CastFilterType::New();
castFilter->SetInput(fileReader->GetOutput());
castFilter->Update();
//ThreeDImageFloatType *t3dim = castFilter->GetOutput();
t3dim = castFilter->GetOutput();
return t3dim;
}
これは、クラスに2つのグローバル変数も含まれる関数です。
ImageFileReaderType::Pointer fileReader;
ThreeDImageFloatType *t3dim;
たとえば、私のmainメソッドからクラス内の関数を呼び出して、のような戻り値にアクセスしようとすると t3dim->GetLargestPossibleRegion().GetSize();
、アクセス違反エラーが発生します。コードを外部委託していないかどうかに注意することが重要です。それをmainメソッド内に含めると、魅力のように機能します。何が問題なのですか?どうすれば修正できますか?
[編集]文字列filenameをconstchar*filenameに置き換えてみました。主な方法は次のようになります。
MyClass imIO;
const char* filename = "path to file";
ThreeDImageFloatType *t3dim = imIO.loadImage(filename);
t3dim->GetLargestPossibleRegion().GetSize();
繰り返しますが、関数のコードをmainメソッドに完全に入れると、機能します。
[/編集]
[オフトピック]itk固有の質問なので、モデレーターはitkとしてタグ付けできますか?[/オフトピック]