簡體   English   中英

為什么我不能訪問main中的imagedata?

[英]why can't I access imagedata in main?

我正在嘗試編寫一個使用VTK和C ++讀取MRI數據的程序。 但是我無法獲得MRI原始數據的間隔。 “ GetSpacing”僅在“ ReadImageData”功能中起作用。 我想我在C ++編程中犯了一些錯誤。 但我不知道它在哪里。

vtkImageData* ReadImageData(string mri_imagedata_file)
{
    vtkSmartPointer<vtkMetaImageReader> reader =
        vtkSmartPointer<vtkMetaImageReader>::New();
    reader->SetFileName(mri_imagedata_file.c_str());
    reader->Update();
    vtkImageData* metaimage = reader->GetOutput();
    double sp[3];
    metaimage->GetSpacing(sp);
    cout << sp[0] << " " << sp[1] << " " << sp[2] <<endl; //<----------It works here.
    return metaimage;
}

int main (int argc, char *argv[])
{
    if(argc != 2)
    {
        cerr << "Usage: " << argv[0] << " MRI image data" <<endl;
        return EXIT_FAILURE;
    }
    string mri_imagedata_file = argv[1];// Input "prost00.mhd"

    vtkImageData* metaimage = ReadImageData(mri_imagedata_file);
    double sp2[3];
    metaimage->GetSpacing(sp2);
    cout << sp2[0] << " " << sp2[1] << " " << sp2[2] << endl; //<-----It doesn't work here

}

感謝您的關注。

我的假設是, vtkMetaImageReader::GetOutput()返回指針一些vtkMetaImageReader內部數據,所以當你退出ReadImageData您的reader被破壞,返回指針變為無效。

假設vtkSmartPointer<vtkMetaImageReader>都是一種智能指針,則當ReadImageData返回時, reader指向的函數將被破壞。 這包括元metaimage所指向的內容。

    return metaimage;
    // reader->~();  // Destructed here. Including what is pointed to by metaimage. 
}

一個好的解決方案是返回智能指針而不是metaimage 這樣,當ReadImageData返回時,不會破壞reader指向的內容,並且可以在main中使用。

它看起來像你忘了傳遞數組作為參數傳遞給GetSpacingmain ,所以調用返回過載double* ,讓你的陣列不變。

您也正在打印一個名為spacing的數組,盡管看起來像您想要在sp2中的sp2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM