あ、InsertはPushBackしないのか。
>318の修正を
if(szX != szA){asY.Insert(nL, szX);asY.Erase(nL+1);return asY[nL];}
にしてみて。
修正前は文字列を直接置き換えてたっぽいから、
新しい文字列をその位置に挿入した後、後ろに一つずれた以前の文字列を削除するようにしてみた。

>319でもエラーは出ないし、
RPGの方も「無人」とか「勇者」とか出るようになったからちゃんと動いてるとは思う。

原因はわかんない。
stringの配列要素に直接代入するところが特殊仕様かもしれないけど、
ちゃんと動くこともあるからSystem4.0のバグなのかなぁ。
エラーが出るときもそうでないときも
デバッガに出るans_t変数の現在値は変わらないように見えるし。