[vtkusers] Heap corruption | vtkLookupTable?
Audrius Stundzia
audrius at tomographix.com
Thu Nov 5 23:19:15 EST 2015
Dear All,
OS: Windows 10 x64 IDE: MS VS 2015 VTK: 6.3.0 x64 build
I am getting a "heap corruption" message when a vtkRenderWindow
is closed and the vtkRenderWindowInteractor is stopped.
Specifically the line
renderWindowInteractor->TerminateApp();
in a callback function
static void KeyPressCallbackFunction
The relevant code fragments, appended below, are conventional texture
mapping of an image to a plane. This "heap corruption" did not occur in
Windows 8.1 x64; MS VS 2010; VTK 5.10.1 x64 build
>From the call stack it appears to due to a problem with deleting an
instantiation of vtkLoopupTable:
vtkCommonCore-6.3.dll!vtkDataArrayTemplate<unsigned char>::DeleteArray()
Line 214 C++ vtkCommonCore-6.3.dll!vtkDataArrayTemplate<unsigned
char>::~vtkDataArrayTemplate<unsigned char>() Line 92 C++ vtkCommonCore-
6.3.dll!vtkUnsignedCharArray::~vtkUnsignedCharArray() Line 37 C++
[External Code] vtkCommonCore-
6.3.dll!vtkObjectBase::UnRegisterInternal(vtkObjectBase * __formal, int
check) Line 232 C++ vtkCommonCore-
6.3.dll!vtkObject::UnRegisterInternal(vtkObjectBase * o, int check) Line
901 C++ vtkCommonCore-6.3.dll!vtkObjectBase::UnRegister(vtkObjectBase *
o) Line 190 C++ vtkCommonCore-6.3.dll!vtkLookupTable::~vtkLookupTable()
Line 89C++ [External Code] vtkCommonCore-
6.3.dll!vtkObjectBase::UnRegisterInternal(vtkObjectBase * __formal, int
check) Line 232 C++ vtkCommonCore-
6.3.dll!vtkObject::UnRegisterInternal(vtkObjectBase * o, int check) Line
901 C++ vtkCommonCore-6.3.dll!vtkObjectBase::UnRegister(vtkObjectBase *
o) Line 190 C++ vtkCommonCore-
6.3.dll!vtkSmartPointerBase::~vtkSmartPointerBase() Line 62 C++
[External Code]
Any insight would be appreciated.
Regards,
Audrius
//--------------------------------------- // Start: relevant code
fragment //---------------------------------------
{
. . .
vtkSmartPointer<vtkCamera> camera_ = vtkSmartPointer<vtkCamera>::New();
camera_->SetPosition( 0.0, 0.0, -1.0); camera_->SetRoll(180.0);
camera_->Zoom( zoomFactor_ );
//--------------- vtkSmartPointer<vtkRenderer> renderer_ =
vtkSmartPointer<vtkRenderer>::New(); renderer_-
>SetActiveCamera(camera_); renderer_->SetBackground( 0.0, 0.0, 0.0 );
//--------------- vtkSmartPointer<vtkRenderWindow> renderWindow_ =
vtkSmartPointer<vtkRenderWindow>::New(); renderWindow_->AddRenderer(
renderer_ ); renderWindow_->SetSize ( winSizeX_ , winSizeY_ ); renderWindow_-
>SetPosition ( winPosX_ , winPosY_ ); renderWindow_->SwapBuffersOn();
//--------------- vtkSmartPointer<vtkRenderWindowInteractor>
renderWindowInteractor_ =
vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor_-
>SetRenderWindow( renderWindow_);
vtkSmartPointer<vtkCallbackCommand> keyPressCallback_ =
vtkSmartPointer<vtkCallbackCommand>::New(); keyPressCallback_-
>SetCallback( advDiagnosticDisplay::KeyPressCallbackFunction);
renderWindowInteractor_->AddObserver ( vtkCommand::KeyPressEvent ,
keyPressCallback_ );
// Build a colour map vtkSmartPointer<vtkLookupTable> colourMap_ =
vtkSmartPointer<vtkLookupTable>::New(); InitializeColourMap(colourMap_);
// Apply the texture vtkSmartPointer<vtkTexture> texture_ =
vtkSmartPointer<vtkTexture>::New(); if(interpolation_) texture_-
>InterpolateOn(); else texture_->InterpolateOff(); texture_-
>RepeatOff(); texture_->SetQualityTo32Bit(); texture_-
>MapColorScalarsThroughLookupTableOn(); texture_->SetInputData( imageReslice_-
>GetOutput()); texture_->SetLookupTable( colourMap_);
//--------------- vtkSmartPointer<vtkPlaneSource> planeSource_ =
vtkSmartPointer<vtkPlaneSource>::New(); planeSource_->SetResolution( 1,
1 ); planeSource_->SetPoint1( eX_, 0.0, 0.0); planeSource_->SetPoint2(
0.0, eY_, 0.0); planeSource_->SetCenter( centre_.data()); planeSource_-
>SetNormal( 0.0, 0.0, 1.0); planeSource_->Update();
//--------------- vtkSmartPointer<vtkPolyDataMapper> mapper_ =
vtkSmartPointer<vtkPolyDataMapper>::New(); mapper_-
>ScalarVisibilityOff(); mapper_->SetInputData( planeSource_-
>GetOutput()); mapper_->Update();
//--------------- vtkSmartPointer<vtkProperty> property_ =
vtkSmartPointer<vtkProperty>::New(); property_->SetOpacity( opacity_);
//--------------- vtkSmartPointer<vtkActor> actor_ =
vtkSmartPointer<vtkActor>::New(); actor_->SetProperty( property_ ); actor_-
>SetTexture( texture_ ); actor_->SetMapper( mapper_ );
//--------------- renderer_->AddActor(actor_);
renderer_->ResetCamera();
renderWindow_->Render(); renderWindow_->SetWindowName( "Window
name here");
renderWindowInteractor_->Start();
. . .
}
void InitializeColourMap(vtkSmartPointer<vtkLookupTable>& colourMap) {
//--------------- colourMap->SetNumberOfColors(nImageColours_ + 1); colourMap-
>SetTableRange (minScalar_ , maxScalar_);
if (colour_) { colourMap->SetHueRange(0.666667f, 0.0f); colourMap-
>Build(); colourMap->SetTableValue(0, 0.0f, 0.0f, 0.0f, 0.0f); } else {
colourMap->SetHueRange(0.5f, 0.5f); colourMap->SetSaturationRange(0.0f,
1.0f); colourMap->Build(); colourMap->SetTableValue(0, 0.0f, 0.0f,
0.0f, 0.0f);
for (int iC = 1; iC <= nImageColours_; ++iC) { const float val =
static_cast<float>(iC) / static_cast<float>(nImageColours_ + 1); colourMap-
>SetTableValue (iC , val , val , val , 1.0f); } } }
// // vtk callback function: stop rendering and close window //
static void KeyPressCallbackFunction ( vtkObject* caller , long unsigned
int vtkNotUsed(eventId) , void* vtkNotUsed(clientData) , void*
vtkNotUsed(callData)) { vtkRenderWindowInteractor*
renderWindowInteractor =
dynamic_cast<vtkRenderWindowInteractor*>(caller);
// Close the window vtkRenderWindow* renderWindow = renderWindowInteractor-
>GetRenderWindow(); renderWindow->Finalize();
// Stop the interactor // When the next line is executed, the heap
corruption message is generated renderWindowInteractor->TerminateApp();
std::cout << "Window closed." << std::endl; }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20151105/2013fced/attachment.html>
More information about the vtkusers
mailing list