CarkusL / CenterPoint

Export CenterPoint PonintPillars ONNX Model For TensorRT
MIT License
204 stars 50 forks source link

free(): invalid next size (normal) #12

Closed OrcunCanDeniz closed 2 years ago

OrcunCanDeniz commented 2 years ago

I observed that infer() function ends succesfully, however any of the parts coming after the execution of the infer() cant execute because of the error free(): invalid next size (normal). When I ran valgrind ;

valgrind: m_mallocfree.c:307 (get_bszB_as_is): Assertion 'bszB_lo == bszB_hi' failed. valgrind: Heap block lo/hi size mismatch: lo = 24002528, hi = 3181631744. This is probably caused by your program erroneously writing past the end of a heap block and corrupting heap metadata. If you fix any invalid writes reported by Memcheck, this assertion failure will probably go away. Please try that before reporting this as a bug.

zhangtingyu11 commented 2 years ago

I run the program with the pcd file provided by the author,and it runs with no error.But when I run the program with my own pcd files, the error occurs.Then I debug the program with gdb,and I found that when the infer() ends, the samplesCommon::BufferManager buffers will destruct automatically,and the class member mManagedBuffers in buffers will destruct too.This causes the hostBuffer and deviceBuffer destruct, and they call their template destructor.And the error occurs when the hostBuffer automatically destruct,so I search where the program changes the hostbuffer,and I find that the function preprocess() use the multi-threading.So I think the multi-threading disrupt the buffer.I simply change the function PreprocessWorker() in preprocess.cpp from thread to process, and it works for me.

OrcunCanDeniz commented 2 years ago

Yeah, i also "unthreaded" the preprocess and now it works. But interestingly, PreProcess Time: decreased to the half of the threaded preprocess. Did you notice such thing?