[vtkusers] _CrtIsValidHeapPointer failed when reading a VTK file with vtkPolyDataReader under win32 (linux: no pb)
Benoit Scherrer
benoitscherrer at gmail.com
Tue Jun 29 00:50:40 EDT 2010
Hi,
I have a project using VTK (and QT). The whole project is organized with
modules, one of them being a dynamic
library (Core.dll, to provide some functions to plugins) and
other static. VTK is compiled in static mode.
For linux gcc, it requires to compile with the -fpic flag and everything is
fine, VTK seems to be correctly
called in all the modules.
Under Win32 with Visual Studio it is another story: _CrtIsValidHeapPointer
returns FALSE
and crashes the application when i try to read a VTK file with the following
simple code:
vtkSmartPointer<vtkPolyDataReader> reader =
vtkSmartPointer<vtkPolyDataReader>::New();
reader->SetFileName(filename.toAscii().data());
reader->Update();
When looking at the call stack you can see that calls:
> msvcr90d.dll!_CrtIsValidHeapPointer(const void * pUserData) Line 2103 C++
msvcr90d.dll!_free_dbg_nolock(void * pUserData, int nBlockUse) Line 1317
+ 0x9 bytes C++
msvcr90d.dll!_free_dbg(void * pUserData, int nBlockUse) Line 1258 + 0xd
bytes C++
msvcr90d.dll!free(void * pUserData) Line 49 + 0xb bytes C++
mriED.exe!vtkDataReader::ReadArray(const char * dataType, int numTuples,
int numComp) Line 1915 + 0xc bytes C++
mriED.exe!vtkDataReader::ReadPoints(vtkPointSet * ps, int numPts) Line
1932 + 0x15 bytes C++
mriED.exe!vtkPolyDataReader::RequestData(vtkInformation * __formal,
vtkInformation * __formal, vtkInformationVector * outputVector) Line 165 +
0x13 bytes C++
mriED.exe!vtkDataReader::ProcessRequest(vtkInformation * request,
vtkInformationVector * * inputVector, vtkInformationVector * outputVector)
Line 3062 + 0x1e bytes C++
mriED.exe!vtkExecutive::CallAlgorithm(vtkInformation * request, int
direction, vtkInformationVector * * inInfo, vtkInformationVector * outInfo)
Line 747 + 0x21 bytes C++
mriED.exe!vtkDemandDrivenPipeline::ExecuteData(vtkInformation * request,
vtkInformationVector * * inInfo, vtkInformationVector * outInfo) Line 507 +
0x1d bytes C++
mriED.exe!vtkDemandDrivenPipeline::ProcessRequest(vtkInformation *
request, vtkInformationVector * * inInfoVec, vtkInformationVector *
outInfoVec) Line 279 + 0x1e bytes C++
mriED.exe!vtkStreamingDemandDrivenPipeline::ProcessRequest(vtkInformation
* request, vtkInformationVector * * inInfoVec, vtkInformationVector *
outInfoVec) Line 202 + 0x14 bytes C++
mriED.exe!vtkDemandDrivenPipeline::UpdateData(int outputPort) Line 449 +
0x28 bytes C++
mriED.exe!vtkStreamingDemandDrivenPipeline::Update(int port) Line 246 +
0x1c bytes C++
mriED.exe!vtkExecutive::Update() Line 315 + 0x11 bytes C++
mriED.exe!vtkDemandDrivenPipeline::Update() Line 313 C++
mriED.exe!vtkStreamingDemandDrivenPipeline::Update() Line 227 C++
mriED.exe!vtkAlgorithm::Update() Line 1167 + 0x1a bytes C++
mriED.exe!VTKMeshReader::ReadVTK(const QString & filename) Line 227 +
0x1d bytes C++
So it crashes in vtkDataReader::ReadArray , at the following line:
vtkAbstractArray *vtkDataReader::ReadArray(const char *dataType, int
numTuples, int numComp)
{
(...)
free(type); << ERROR is there. 'type' is not in the current
heap.
return array;
}
When VTK is compiled in SHARED (dll) everything works well. So the problem
seems to be
mixing dynamic and static libraries with a compilation of VTK as a static
library.
Does mixing dynamic and static libraries is a really bad idea or is it a bug
from VTK?
(i liked the idea to compile VTK in static mode, to avoid to provide all the
dlls with
the exe)
I m using a pretty recent version of VTK from the Git repository (from June,
22th)
Thanks a lot for any idea!
Benoit
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100629/f1af70e7/attachment.htm>
More information about the vtkusers
mailing list