ITK setPixel 遇到堆损坏
ITK setPixel meets heap corruption
我对ITK有一些疑问。我首先创建一个图像。然后我使用"for"来设置每个像素的值。之后,当程序步骤为"图像>设置间距"时,问题会显示出来。VS2010 起诉这可能是由于堆损坏造成的。当我不使用"for"循环时,没有问题。
谁能帮我? 我在VS2010和ITK 4.4.2中运行该程序
#include "iostream"
#include "itkImage.h"
using namespace std;
int main()
{
typedef itk::Image<unsigned char,2> ImageType;
ImageType::IndexType start;
ImageType::SizeType size;
start[0] = 0;
start[1] = 0;
size[0] = 100;
size[1] = 150;
ImageType::RegionType region;
region.SetIndex(start);
region.SetSize(size);
ImageType::Pointer image = ImageType::New();
image->SetLargestPossibleRegion(region);
image->Allocate();
image->FillBuffer( 0 );
for(int j=0; j<150; j++)
{
for (int i=0;i<100;i++)
{
ImageType::PixelType pixelVal;
pixelVal = i+j;
ImageType::IndexType index = {{i,j}};
image->SetPixel(index,pixelVal);
}
}
ImageType::SpacingType spacing;
spacing[0] = 0.1;
spacing[1] = 0.4;
image->SetSpacing(spacing);
ImageType::SpacingType sp =image->GetSpacing();
cout<<sp[0]<<' '<<sp[1]<<endl;
}
问题是您没有使用 image->SetBufferedRegion(region)
方法来设置位于内存中的图像区域。
您应该替换以下行
image->SetLargestPossibleRegion(region);
跟
image->SetRegions(region);
SetRegions()
方法将同时调用SetLargestPossibleRegion()
、SetRequestedRegion()
和SetBufferedRegion()
方法以及您提供给它的区域。
手动创建映像时,应始终使用 SetRegions()
。
老实说,我不了解此错误的全部范围。从运行时给出的错误中出了什么问题根本不明显......只是在销毁image
对象时会发生某种错误。它与SetSpacing()
方法或分配给index
对象的方式无关。
相关文章:
- 为什么会发生堆损坏
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 编译包含字符串的代码时遇到问题
- 遇到新行时,有没有办法停止istream_iterator
- 平均图像时图像损坏
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 在 for 循环中查找问题时遇到困难
- 为什么C中的通用链表中存储的数据已损坏
- 创建结构的数组时遇到分段错误
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 为什么我遇到分段错误?
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 这些是什么样的错误?即使我不在 Linux 上工作,我也遇到了 Linux 错误
- C++双重释放或损坏(out)
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 使用全局声明的向量时,C++双重释放错误/损坏
- ITK setPixel 遇到堆损坏