gpt4 book ai didi

c++ - itk filereader 导致访问冲突异常

转载 作者:行者123 更新时间:2023-11-28 08:25:59 25 4
gpt4 key购买 nike

我遇到了访问冲突异常的问题。我正在使用 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;

现在,如果您从我的主要方法调用类中的函数并尝试访问返回值,例如 t3dim->GetLargestPossibleRegion().GetSize();。我收到访问冲突错误。重要的是要注意,如果我不外包代码,并将它放在主要方法中,它就像一个魅力。可能是什么问题呢?我该如何解决?

[编辑]我尝试用 const char* 文件名替换字符串文件名。主要方法如下所示。

MyClass imIO;

const char* filename = "path to file";
ThreeDImageFloatType *t3dim = imIO.loadImage(filename);
t3dim->GetLargestPossibleRegion().GetSize();

同样,如果我将函数中的代码完全放入它工作的主要方法中。

[/编辑]

[题外话]也许版主可以将其标记为 itk,因为这是一个特定于 itk 的问题?[/题外话]

最佳答案

我自己找到了答案。问题的解决方案在于这一行:

fileReader = ImageFileReaderType::New();

这是一个智能指针。所以当函数返回时,它会被注销。因此,从该函数接收到内部缓冲区(读取文件)的指针不能再使用。当指针指向实际内存时,就不能再访问它了。访问冲突错误。

关于c++ - itk filereader 导致访问冲突异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4065016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com