ITK 图像分配和 sysmalloc
ITK image allocation and sysmalloc
我目前正在继承旧代码并尝试 运行 它。作为其中的一部分,通过 ITK(已构建并安装在系统上)完成图像生成
目前引起问题的 (t运行cated) 函数如下
void PrintDensityImage(std::vector<float> *HU, imageDimensions dimensions, std::string nameFile)
{
ImageType::Pointer image = ImageType::New();
ImageType::RegionType region;
ImageType::IndexType start;
start[0] = 0;
start[1] = 0;
start[2] = 0;
ImageType::SizeType size;
size[0] = 512;//dimensions.nbVoxel.x;
size[1] = 512;//dimensions.nbVoxel.y;
size[2] = 8;//dimensions.nbVoxel.z;
ImageType::SpacingType inputSpacing;
inputSpacing[0] = 0.9;//dimensions.voxelSize.x;
inputSpacing[1] = 0.9;//dimensions.voxelSize.y;
inputSpacing[2] = 1.1;//dimensions.voxelSize.z;
std::cout << inputSpacing << endl;
std::cout << size << " " << start << " " << region << endl;
region.SetSize(size);
region.SetIndex(start);
image->SetRegions(region);
image->SetSpacing(inputSpacing);
printf("I hit here...\n");
std::cout << region << endl;
image->Allocate();
printf("But I do not get here\n");
ImageType::IndexType pixelIndex;
.........
}
并且header包括
#include <itkImageFileReader.h>
#include <itkImageFileWriter.h>
#include <itkHDF5ImageIO.h>
#include "itkGDCMImageIO.h"
#include "itkGDCMSeriesFileNames.h"
#include "itkNumericSeriesFileNames.h"
#include "itkImageSeriesReader.h"
typedef itk::Image< float, 3 > ImageType;
当前控制台输出为
[0.9, 0.9, 1.1]
[512, 512, 8] [0, 0, 0] ImageRegion (0x7ffd0e7a6910)
Dimension: 3
Index: [0, 0, 0]
Size: [0, 0, 0]
I hit here...
ImageRegion (0x7ffd0e7a6910)
Dimension: 3
Index: [0, 0, 0]
Size: [512, 512, 8]
后面报错
CT_GPUMCD: malloc.c:2379: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
我不确定这个错误的原因是什么,但它似乎是由 image->Allocate()
行引起的,我不太明白为什么。据我从 ITK 文档 (https://itk.org/ITKSoftwareGuide/html/Book1/ITKSoftwareGuide-Book1ch4.html) 中读到的,这应该没问题。
如果对此事有任何见解,我将不胜感激,因为我真的不明白问题出在哪里。
错误来自 malloc.c
,因此来自 C run-time 库。您使用的是一些实验性或测试版的编译器吗?或者一些修改过的 CRT?或者一些用自己的版本替换 malloc 的软件(例如跟踪内存泄漏)?我怀疑这与 ITK 有很大关系。如果将 image->Allocate();
替换为 float * p = new float[512*512*8];
会怎样?
作为参考,Allocate
是 here, which boils down to new T[size]。
我目前正在继承旧代码并尝试 运行 它。作为其中的一部分,通过 ITK(已构建并安装在系统上)完成图像生成
目前引起问题的 (t运行cated) 函数如下
void PrintDensityImage(std::vector<float> *HU, imageDimensions dimensions, std::string nameFile)
{
ImageType::Pointer image = ImageType::New();
ImageType::RegionType region;
ImageType::IndexType start;
start[0] = 0;
start[1] = 0;
start[2] = 0;
ImageType::SizeType size;
size[0] = 512;//dimensions.nbVoxel.x;
size[1] = 512;//dimensions.nbVoxel.y;
size[2] = 8;//dimensions.nbVoxel.z;
ImageType::SpacingType inputSpacing;
inputSpacing[0] = 0.9;//dimensions.voxelSize.x;
inputSpacing[1] = 0.9;//dimensions.voxelSize.y;
inputSpacing[2] = 1.1;//dimensions.voxelSize.z;
std::cout << inputSpacing << endl;
std::cout << size << " " << start << " " << region << endl;
region.SetSize(size);
region.SetIndex(start);
image->SetRegions(region);
image->SetSpacing(inputSpacing);
printf("I hit here...\n");
std::cout << region << endl;
image->Allocate();
printf("But I do not get here\n");
ImageType::IndexType pixelIndex;
.........
}
并且header包括
#include <itkImageFileReader.h>
#include <itkImageFileWriter.h>
#include <itkHDF5ImageIO.h>
#include "itkGDCMImageIO.h"
#include "itkGDCMSeriesFileNames.h"
#include "itkNumericSeriesFileNames.h"
#include "itkImageSeriesReader.h"
typedef itk::Image< float, 3 > ImageType;
当前控制台输出为
[0.9, 0.9, 1.1]
[512, 512, 8] [0, 0, 0] ImageRegion (0x7ffd0e7a6910)
Dimension: 3
Index: [0, 0, 0]
Size: [0, 0, 0]
I hit here...
ImageRegion (0x7ffd0e7a6910)
Dimension: 3
Index: [0, 0, 0]
Size: [512, 512, 8]
后面报错
CT_GPUMCD: malloc.c:2379: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
我不确定这个错误的原因是什么,但它似乎是由 image->Allocate()
行引起的,我不太明白为什么。据我从 ITK 文档 (https://itk.org/ITKSoftwareGuide/html/Book1/ITKSoftwareGuide-Book1ch4.html) 中读到的,这应该没问题。
如果对此事有任何见解,我将不胜感激,因为我真的不明白问题出在哪里。
错误来自 malloc.c
,因此来自 C run-time 库。您使用的是一些实验性或测试版的编译器吗?或者一些修改过的 CRT?或者一些用自己的版本替换 malloc 的软件(例如跟踪内存泄漏)?我怀疑这与 ITK 有很大关系。如果将 image->Allocate();
替换为 float * p = new float[512*512*8];
会怎样?
作为参考,Allocate
是 here, which boils down to new T[size]。