track->GetNextTouchableHandle()->GetVolume()->GetLogicalVolume();

When I use

G4LogicalVolume* volume
            = track->GetTouchableHandle()->GetVolume()->GetLogicalVolume();

if (volume != fScoringVolume) return;
The project can work. But I use

G4LogicalVolume* volume
            = track->GetNextTouchableHandle()->GetVolume()->GetLogicalVolume();

if (volume != fScoringVolume) return;
It can’t work. The segmentation violation occured.

### CAUGHT SIGNAL: 11 ### address: 0x10,  signal =  SIGSEGV, value =   11, description = segmentation violation. Address not mapped to object.

Backtrace:
[PID=3521, TID=0][ 0/10]> ../Shield2(+0xccfb) [0x7f820e150cfb]
[PID=3521, TID=0][ 1/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4tracking.so(_ZN17G4TrackingManager15ProcessOneTrackEP7G4Track+0x31c) [0x7f820d02568c]
[PID=3521, TID=0][ 2/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4event.so(_ZN14G4EventManager12DoProcessingEP7G4Event+0x893) [0x7f820d066303]
[PID=3521, TID=0][ 3/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN18G4WorkerRunManager11DoEventLoopEiPKci+0x1cc) [0x7f820d12dcdc]
[PID=3521, TID=0][ 4/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN12G4RunManager6BeamOnEiPKci+0x62) [0x7f820d11f4c2]
[PID=3521, TID=0][ 5/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN18G4WorkerRunManager6DoWorkEv+0x36b) [0x7f820d1312eb]
[PID=3521, TID=0][ 6/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN20G4MTRunManagerKernel11StartThreadEP14G4WorkerThread+0x19e) [0x7f820d154f5e]
[PID=3521, TID=0][ 7/10]> /lib/x86_64-linux-gnu/libstdc++.so.6(+0xd6de4) [0x7f820a8c6de4]
[PID=3521, TID=0][ 8/10]> /lib/x86_64-linux-gnu/libpthread.so.0(+0x8609) [0x7f820a5a5609]
[PID=3521, TID=0][ 9/10]> /lib/x86_64-linux-gnu/libc.so.6(clone+0x43) [0x7f820a6ef163]

: Segmentation fault (Address not mapped to object [0x10])

I don’t know why. Can you help me? Thank you.

You’re dereferencing pointers one after another, without checking whether they are null:

G4LogicalVolume* volume = 0;
const G4TouchableHandle& touch = track->GetNextTouchableHandle();
if (touch) volume = nexttouch->GetVolume()->GetLogicalVolume();

Then you need to include code to handle the case where “touch” fails.

Thank you for your reply. I use your code, like this:

G4LogicalVolume* volume = 0;
    const G4TouchableHandle& nexttouch = track->GetNextTouchableHandle();
    if(nexttouch) volume = nexttouch->GetVolume()->GetLogicalVolume();

But it can’t work, i don’t know why. Can you help me?

### CAUGHT SIGNAL: 11 ### address: 0x10,  signal =  SIGSEGV, value =   11, description = segmentation violation. Address not mapped to object.

### CAUGHT SIGNAL: 11 ### address: 0x10,  signal =  SIGSEGV, value =   11, description = segmentation violation. Address not mapped to object.

Backtrace:
[PID=4835, TID=2][ 0/10]> ./Shield2(+0xce26) [0x7fc189fa2e26]
[PID=4835, TID=2][ 1/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4tracking.so(_ZN17G4TrackingManager15ProcessOneTrackEP7G4Track+0x31c) [0x7fc188e7568c]
[PID=4835, TID=2][ 2/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4event.so(_ZN14G4EventManager12DoProcessingEP7G4Event+0x893) [0x7fc188eb6303]
[PID=4835, TID=2][ 3/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN18G4WorkerRunManager11DoEventLoopEiPKci+0x1cc) [0x7fc188f7dcdc]
[PID=4835, TID=2][ 4/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN12G4RunManager6BeamOnEiPKci+0x62) [0x7fc188f6f4c2]
[PID=4835, TID=2][ 5/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN18G4WorkerRunManager6DoWorkEv+0x36b) [0x7fc188f812eb]
[PID=4835, TID=2][ 6/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN20G4MTRunManagerKernel11StartThreadEP14G4WorkerThread+0x19e) [0x7fc188fa4f5e]
[PID=4835, TID=2][ 7/10
Backtrace:
[PID=4835, TID=4][ 0/10]> ./Shield2(+0xce26) [0x7fc189fa2e26]
[PID=4835, TID=4][ 1/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4tracking.so(_ZN17G4TrackingManager15ProcessOneTrackEP7G4Track+0x31c) [0x7fc188e7568c]
[PID=4835, TID=4][ 2/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4event.so(_ZN14G4EventManager12DoProcessingEP7G4Event+0x893) [0x7fc188eb6303]
[PID=4835, TID=4][ 3/]> /lib/x86_64-linux-gnu/libstdc++.so.6(+0xd6de4) [0x7fc186716de4]
[PID=4835, TID=2][ 8/10]> /lib/x86_64-linux-gnu/libpthread.so.0(+0x8609) [0x7fc1863f5609]
[PID=4835, TID=2][ 9/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN18G4WorkerRunManager11DoEventLoopEiPKci+0x1cc) [0x7fc188f7dcdc]
[PID=4835, TID=4][ 4/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN12G4RunManager6BeamOnEiPKci+0x62) [0x7fc188f6f4c2]
[PID=4835, TID=4][ 5/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN18G4WorkerRunManager6DoWorkEv+0x36b) [0x7fc188f812eb]
[PID=4835, TID=4][ 6/10]> /home/lvll/geant4/geant4.11.0.1/install/lib/libG4run.so(_ZN20G4MTRunManagerKernel11StartThreadEP14G4WorkerThread+0x19e) [0x7fc188fa4f5e]
[PID=4835, TID=4][ 7/10]> /lib/x86_64-linux-gnu/libstdc++.so.6(+0xd6de4) [0x7fc186716de4]
10]> /lib/x86_64-linux-gnu/libc.so.6(clone+0x43) [0x7fc18653f163]
[PID=4835, TID=4][ 8/10]> /lib/x86_64-linux-gnu/libpthread.so.0(+0x8609) [0x7fc1863f5609]

: Segmentation fault (Address not mapped to object [0x10])

Check the result of the GetVolume() call. Is it returning a valid pointer? It looks like you’re on a Linux system. Run your job in the debugger and see what’s going on there.