使用 vtkDICOMWriter 编写 DICOM 时访问读取冲突
Access Reading Violation when writing a DICOM with vtkDICOMWriter
我正在尝试将vtkImageData编写为DICOM。当我尝试编写图像时,我不断收到"访问读取冲突"。
0x00007FFDA30ECA50时未处理的异常:0xC0000005:访问冲突读取位置0x000001BD38D5C000
这是我的代码:
vtkSmartPointer<vtkDICOMWriter> dcmWriter = vtkSmartPointer<vtkDICOMWriter>::New();
dcmWriter->SetInputData(testDat);
dcmWriter->SetFileName(fullPath.toStdString().c_str());
dcmWriter->Update(); // this line breaks
dcmWriter->Write();
testDat
是一种vtkSmartPointer<vtkImageData>
类型,其中包含数据。关于导致错误的原因的任何想法?我在网上找不到类似的东西。
我遵循了这个例子:https://github.com/dgobbi/vtk-dicom/blob/master/Examples/TestDICOMWriter.cxx
我没有元数据,但这应该不是问题。
我需要在这里做一些猜测,因为你没有发布所有代码,但我怀疑问题发生在以下行:
dcmWriter->SetFileName(fullPath.toStdString().c_str());
toStdString()
很可能返回一个临时std::string
(fullPath
看起来像一个Qt QString
(,你称之为c_str()
。在声明之后,你的临时被摧毁了,你传递给SetFileName
的任何内容现在都是一个悬而未决的指针。因此段错误。
请尝试以下操作:
const auto pathString = fullPath.toStdString();
dcmWriter->SetFileName(pathString.c_str());
这应该希望工作正常。即使不是,这肯定是您的代码的问题。
这些行来自您发布的示例:
writer->SetFilePrefix("/tmp");
writer->SetFilePattern("%s/IM-0001-%04.4d.dcm");
而你使用
dcmWriter->SetFileName(fullPath.toStdString().c_str());
似乎vtkDICOMWriter写入了多个文件,因此您可能需要提供文件模式。无论如何,很难猜测为什么它会给出阅读错误,如果您不发布完整的工作示例,也很难提供帮助。
最后,vtkDICOMWriter 不是 vtk 的一个类,它是在 2017 年单独发布的(似乎(。这意味着它不会在每个新版本中针对 VTK 的其余部分进行测试。
相关文章:
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 读取访问冲突.这0xCDCDCDCD
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 尝试通过共享指针使用变量时读取访问冲突
- C++ 读取访问冲突,0xCDCDCDCD
- 读取缓冲区时访问冲突 UNICODE_STRING
- 从二进制文件中读取元素时引发异常(引发异常:读取访问冲突. _Pnext 0xB414D4)
- 从文件读取,并循环访问文件以写入数组
- 使用智能指针读取访问冲突
- 引发异常:读取访问冲突.**此**0x40错误
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 如何在读取文件时访问以前的字符串?
- C++ 访问读取错误
- 使用 vtkDICOMWriter 编写 DICOM 时访问读取冲突
- 从结构传递数组成员会导致访问读取冲突
- C++访问读取位置时发生冲突,类此指针为NULL
- 将两个字符串一起分配,获取访问读取冲突
- sprintf()访问读取位置时发生冲突
- 0xccccc处的访问读取冲突