在 VC6 專案屬性 → Link →「Entry-point symbol」填入 main,或命令列 link /entry:main hello.obj。編譯連結均成功,但執行時崩潰:

NTDLL! 7c9100e8() _heap_alloc_base(unsigned int 0x00001030) line 161 _heap_alloc_dbg(...) line 367 _nh_malloc_dbg(...) line 242 _malloc_dbg(...) line 163 _getbuf(_iobuf * 0x00422a58) line 59 _flsbuf(int 0x00000068, _iobuf * 0x00422a58) line 153 write_char(...) line 1083 _output(...) line 393 printf(...) line 60 main() line 5 KERNEL32! 7c817077()
崩潰發生於 NTDLL 內部的堆積配置常式 _heap_alloc_base,根因是 printf 需要緩衝區,呼叫 _getbuf → _flsbuf → _malloc_dbg 分配記憶體,但 CRT 堆積尚未初始化(_heap_init 未被呼叫)。
mainCRTStartup 執行了關鍵初始化:_heap_init(建立 CRT 堆積)、_ioinit(初始化標準串流)、命令列/環境變數解析、atexit 登錄等。main 會略過所有初始化,導致任何使用 CRT 資源(堆積、I/O、區域設定、Thread Local Storage)的函式在執行期失敗。myentry 且未手動執行初始化,結果相同。下一篇將探討:若入口設為不存在的函式(如 myentry),連結器會如何報錯?以及如何正確實作「無 CRT 依賴」的最小程式。