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]; 会怎样?

作为参考,Allocatehere, which boils down to new T[size]