Crash occurred when deleting lots of stops on a large map.
The obvious fix would be to protect the access to c.halt in haltestelle_t::fill_connected_component by an if condition but I am not sure whether this only treats the symptoms and not the cause.
To reproduce, load
https://files.simutrans-germany.com/upload/11453-routing-bug.sve,
then try to delete some above-ground stops as "MMol Trans" near Albion.
/home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354:35: runtime error: member call on null pointer of type 'struct haltestelle_t'
/home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1347:6: runtime error: member access within null pointer of type 'struct haltestelle_t'
AddressSanitizer:DEADLYSIGNAL
=================================================================
==21785==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000388 (pc 0x6055bbb8c3d2 bp 0x000000000388 sp 0x7ffd5db18a60 T0)
==21785==The signal is caused by a READ memory access.
==21785==Hint: address points to the zero page.
#0 0x6055bbb8c3d2 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1347
#1 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#2 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#3 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#4 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#5 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#6 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#7 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#8 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#9 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#10 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#11 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#12 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#13 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#14 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#15 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#16 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#17 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#18 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#19 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#20 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#21 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#22 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#23 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#24 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#25 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#26 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#27 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#28 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#29 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#30 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#31 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#32 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#33 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#34 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#35 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#36 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#37 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#38 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#39 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#40 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#41 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#42 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#43 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#44 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#45 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#46 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#47 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#48 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#49 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#50 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#51 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#52 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#53 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#54 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#55 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#56 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#57 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#58 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#59 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#60 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#61 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#62 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#63 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#64 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#65 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#66 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#67 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#68 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#69 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#70 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#71 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#72 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#73 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#74 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#75 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#76 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#77 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#78 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#79 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#80 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#81 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#82 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#83 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#84 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#85 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#86 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#87 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#88 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#89 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#90 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
#91 0x6055bbb8cf46 in haltestelle_t::rebuild_connected_components() /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1367
#92 0x6055bbc075ed in haltestelle_t::step_all() /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:144
#93 0x6055bc2513ee in karte_t::step() /home/ceeac/code/simutrans/src/simutrans/world/simworld.cc:3292
#94 0x6055bc25956b in karte_t::interactive(unsigned int) /home/ceeac/code/simutrans/src/simutrans/world/simworld.cc:6307
#95 0x6055bbc5d469 in simu_main(int, char**) /home/ceeac/code/simutrans/src/simutrans/simmain.cc:1693
#96 0x6055bbc976aa in sysmain(int, char**) /home/ceeac/code/simutrans/src/simutrans/sys/simsys.cc:1470
#97 0x7530a4434e07 (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
#98 0x7530a4434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
#99 0x6055ba11dfe4 in _start (/home/ceeac/code/simutrans/build/default/simutrans/simutrans+0x4360fe4) (BuildId: 8c555c7bd93132cf5f8559540671f269ae9b9250)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1347 in haltestelle_t::fill_connected_component(unsigned char, unsigned short)
==21785==ABORTING
Cannot reproduce this. I have deleted half of the stops and all is fine. Maybe my computer is too fast/slow.
But in principle, you are right. If a stop in the list earlier is deleted, then the halthandle could be invalid. So checking in the loop with a if(c.halt.is_bound()) makes sense.
Added the check in r11464.