地下の電力線を2つ以上隣接して設置した場合、の撤去後にクラッシュする場合がある
再現手順:
1.添付したセーブゲームを開く
2.撤去ツールで入り口をクリックして撤去する
3.残った4つの入り口をすべて撤去する
4.電力線トンネルがあった場所をクリックして、再び電力線トンネルを建設する
結果:
クラッシュする
If you build more than 2 powerline tunnel side by side, it may be crash after removed them.How to reproduce:
1. Load attached savegame. (for pak64 with tunnel.PowerTunnel.pak)
2. Select 'Remove' tool and click on entrance of tunnel to remove them.
3. Remove all 4 entrance remained.
4. Select 'powerline tunnel' and click on slope tile to build powerline tunnel.
Result:
Crash.
5718d.exe caused an Access Violation at location 7c9501b3 in module ntdll.dll Writing to location 00664d26.
Registers:
eax=00664d0c ebx=03d90000 ecx=00000014 edx=01fc005a esi=00664d28 edi=00664d20
eip=7c9501b3 esp=0023e6ac ebp=0023e8cc iopl=0 nv up ei pl nz ac po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000216
Call stack:
7C9501B3 ntdll.dll:7C9501B3 RtlAllocateHeap
77BDC3C9 msvcrt.dll:77BDC3C9 free
77BDC3E7 msvcrt.dll:77BDC3E7 free
77BDC42E msvcrt.dll:77BDC42E malloc
00621DB7 5718d.exe:00621DB7
0045C280 5718d.exe:0045C280 leitung_t::laden_abschliessen() leitung2.cc:338
...
{
verbinde();
> calc_neighbourhood();
grund_t *gr = welt->lookup(get_pos());
assert(gr);
...
0040E0FE 5718d.exe:0040E0FE tunnelbauer_t::baue_tunnel(karte_t*, spieler_t*, koord3d, koord3d, koord, tunnel_besch_t const*) tunnelbauer.cc:367
...
lt->laden_abschliessen();
}
> tunnel->obj_add(new tunnel_t(welt, pos, sp, besch));
tunnel->calc_bild();
tunnel->set_flag(grund_t::dirty);
...
0040DD65 5718d.exe:0040DD65 tunnelbauer_t::baue(karte_t*, spieler_t*, koord, tunnel_besch_t const*, bool) tunnelbauer.cc:310
...
// Anfang und ende sind geprueft, wir konnen endlich bauen
> if(!baue_tunnel(welt, sp, gr->get_pos(), end, zv, besch)) {
return "Ways not connected";
}
...
005513D5 5718d.exe:005513D5 wkz_tunnelbau_t::do_work(karte_t*, spieler_t*, koord3d const&, koord3d const&) simwerkz.cc:2198
...
if (welt->lookup_kartenboden(start.get_2d())->get_hoehe() == start.z) {
const tunnel_besch_t *besch = tunnelbauer_t::get_besch(default_param);
> return tunnelbauer_t::baue( welt, sp, start.get_2d(), besch, !is_ctrl_pressed() );
}
else {
...
00541F1A 5718d.exe:00541F1A two_click_werkzeug_t::work(karte_t*, spieler_t*, koord3d) simmenu.cc:977
...
// Work here directly.
DBG_MESSAGE("two_click_werkzeug_t::work", "Call tool at %s", pos.get_str() );
> error = do_work( welt, sp, pos, koord3d::invalid );
}
else {
...
0057CCF0 5718d.exe:0057CCF0 karte_t::interactive_event(event_t&) simworld.cc:5672
...
// do the work
wkz->flags |= werkzeug_t::WFL_LOCAL;
> err = wkz->work( this, get_active_player(), zeiger->get_pos() );
}
else {
...
0057E61D 5718d.exe:0057E61D karte_t::interactive(unsigned) simworld.cc:6144
...
}
> DBG_DEBUG4("karte_t::interactive", "point of loop return");
} while(!finish_loop && get_current_month()<quit_month);
...
0053E4D5 5718d.exe:0053E4D5 simu_main(int, char**) simmain.cc:1096
...
welt->interactive(quit_month);
> new_world = true;
welt->get_message()->get_message_flags(&umgebung_t::message_flags[0], &umgebung_t::message_flags[1], &umgebung_t::message_flags[2], &umgebung_t::message_flags[3]);
welt->set_fast_forward(false);
...
00546372 5718d.exe:00546372 sysmain(int, char**) simsys.cc:665
005A7A58 5718d.exe:005A7A58 WinMain@16 simsys_w.cc:703
006232DB 5718d.exe:006232DB getc stdio.h:377
...
? (int) (unsigned char) *__F->_ptr++
: _filbuf (__F);
> }
__CRT_INLINE int __cdecl __MINGW_NOTHROW putc (int __c, FILE* __F)
...
004010FB 5718d.exe:004010FB
If you don't have power tunnel tool in menu, try to build 2 road tunnels.How to reproduce:
1. Load attached savegame. (for pak64 with tunnel.PowerTunnel.pak)
2. Select 'Remove' tool and click on entrance of tunnel to remove them.
3. Remove all 4 entrance remained.
4. Select 'road tunnel' and click on slope tile to build road tunnel.
5. Build one moer road tunnel next to it.
Result:
Crash.
5718d.exe caused an Access Violation at location 7c9501b3 in module ntdll.dll Writing to location 00664a86.
Registers:
eax=00664a08 ebx=03d90000 ecx=00000018 edx=01ff005b esi=00664a88 edi=00664a80
eip=7c9501b3 esp=0023e66c ebp=0023e88c iopl=0 nv up ei pl nz ac pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000212
Call stack:
7C9501B3 ntdll.dll:7C9501B3 RtlAllocateHeap
77BDC3C9 msvcrt.dll:77BDC3C9 free
77BDC3E7 msvcrt.dll:77BDC3E7 free
77BDC42E msvcrt.dll:77BDC42E malloc
00621DB7 5718d.exe:00621DB7
0040DEA2 5718d.exe:0040DEA2 tunnelbauer_t::baue_tunnel(karte_t*, spieler_t*, koord3d, koord3d, koord, tunnel_besch_t const*) tunnelbauer.cc:338
...
baue_einfahrt(welt, sp, pos, zv, besch, weg_besch, cost);
> ribi = ribi_typ(-zv);
// don't move on to next tile if only one tile long
if( end != start ) {
...
0040DD65 5718d.exe:0040DD65 tunnelbauer_t::baue(karte_t*, spieler_t*, koord, tunnel_besch_t const*, bool) tunnelbauer.cc:310
...
// Anfang und ende sind geprueft, wir konnen endlich bauen
> if(!baue_tunnel(welt, sp, gr->get_pos(), end, zv, besch)) {
return "Ways not connected";
}
...
005513D5 5718d.exe:005513D5 wkz_tunnelbau_t::do_work(karte_t*, spieler_t*, koord3d const&, koord3d const&) simwerkz.cc:2198
...
if (welt->lookup_kartenboden(start.get_2d())->get_hoehe() == start.z) {
const tunnel_besch_t *besch = tunnelbauer_t::get_besch(default_param);
> return tunnelbauer_t::baue( welt, sp, start.get_2d(), besch, !is_ctrl_pressed() );
}
else {
...
00541F1A 5718d.exe:00541F1A two_click_werkzeug_t::work(karte_t*, spieler_t*, koord3d) simmenu.cc:977
...
// Work here directly.
DBG_MESSAGE("two_click_werkzeug_t::work", "Call tool at %s", pos.get_str() );
> error = do_work( welt, sp, pos, koord3d::invalid );
}
else {
...
0057CCF0 5718d.exe:0057CCF0 karte_t::interactive_event(event_t&) simworld.cc:5672
...
// do the work
wkz->flags |= werkzeug_t::WFL_LOCAL;
> err = wkz->work( this, get_active_player(), zeiger->get_pos() );
}
else {
...
0057E61D 5718d.exe:0057E61D karte_t::interactive(unsigned) simworld.cc:6144
...
}
> DBG_DEBUG4("karte_t::interactive", "point of loop return");
} while(!finish_loop && get_current_month()<quit_month);
...
0053E4D5 5718d.exe:0053E4D5 simu_main(int, char**) simmain.cc:1096
...
welt->interactive(quit_month);
> new_world = true;
welt->get_message()->get_message_flags(&umgebung_t::message_flags[0], &umgebung_t::message_flags[1], &umgebung_t::message_flags[2], &umgebung_t::message_flags[3]);
welt->set_fast_forward(false);
...
00546372 5718d.exe:00546372 sysmain(int, char**) simsys.cc:665
005A7A58 5718d.exe:005A7A58 WinMain@16 simsys_w.cc:703
006232DB 5718d.exe:006232DB getc stdio.h:377
...
? (int) (unsigned char) *__F->_ptr++
: _filbuf (__F);
> }
__CRT_INLINE int __cdecl __MINGW_NOTHROW putc (int __c, FILE* __F)
...
004010FB 5718d.exe:004010FB
Saving this game also cause crash.How to reproduce:
1. Load attached savegame. (for pak64 with tunnel.PowerTunnel.pak)
2. Select 'Remove' tool and click on entrance of tunnel to remove them.
3. Remove all 4 entrance remained.
4. Save this game.
Result:
Crash.
5718d.exe caused an Access Violation at location 0728dbb8 Writing to location 0728dbb8.
Registers:
eax=0728dbb8 ebx=000001ab ecx=77bdc2e3 edx=0728dbb8 esi=00000074 edi=00000000
eip=0728dbb8 esp=0023ea3c ebp=0023ea78 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
Call stack:
0728DBB8
004BA7F2 5718d.exe:004BA7F2 loadsave_frame_t::~loadsave_frame_t() loadsave_frame.cc:216
...
}
file.close();
> }
...
004BA86F 5718d.exe:004BA86F loadsave_frame_t::~loadsave_frame_t() loadsave_frame.cc:216
...
}
file.close();
> }
...
00561602 5718d.exe:00561602 _ZL18destroy_framed_winP8simwin_t simwin.cc:682
...
delete wins->gui;
}
> windows_dirty = true;
}
...
0056143D 5718d.exe:0056143D _ZL17process_kill_listv simwin.cc:636
...
static void process_kill_list()
{
> FOR(vector_tpl<simwin_t>, & i, kill_list) {
wins.remove(i);
destroy_framed_win(&i);
...
00563047 5718d.exe:00563047 check_pos_win(event_t*) simwin.cc:1161
...
inside_event_handling = NULL;
process_kill_list();
> return swallowed;
}
...
0057D698 5718d.exe:0057D698 karte_t::interactive(unsigned) simworld.cc:5884
...
DBG_DEBUG4("karte_t::interactive", "calling check_pos_win");
> swallowed = check_pos_win(&ev);
if( !swallowed ) {
...
0053E4D5 5718d.exe:0053E4D5 simu_main(int, char**) simmain.cc:1096
...
welt->interactive(quit_month);
> new_world = true;
welt->get_message()->get_message_flags(&umgebung_t::message_flags[0], &umgebung_t::message_flags[1], &umgebung_t::message_flags[2], &umgebung_t::message_flags[3]);
welt->set_fast_forward(false);
...
00546372 5718d.exe:00546372 sysmain(int, char**) simsys.cc:665
005A7A58 5718d.exe:005A7A58 WinMain@16 simsys_w.cc:703
006232DB 5718d.exe:006232DB getc stdio.h:377
...
? (int) (unsigned char) *__F->_ptr++
: _filbuf (__F);
> }
__CRT_INLINE int __cdecl __MINGW_NOTHROW putc (int __c, FILE* __F)
...
004010FB 5718d.exe:004010FB