© ウィンドウズスクリプトプログラマ - Windows Script Programmer 2016
PowerShellのバグ
次のソースを実行する。
$gv=9686
$funcs = @(
{
echo "GlobalOnRead"
$lv = $gv
Write-Output $lv
}
,
{
echo "CopyOnWrite"
$lv = $gv
$lv += 5050 - 9686
Write-Output $lv
}
,
{
echo "LocalOnWrite"
$lv = $gv
$gv += 5050 - 9686
Write-Output ([String]$lv + ":" + $gv)
}
)
for($i = 0; $i -lt $funcs.length; $i++)
{
Write-Output $funcs[$i].invoke()
}
結果
GlobalOnRead
9686
CopyOnWrite
5050
LocalOnWrite
9686:-4636
本来は次になるべきでは
GlobalOnRead
9686
CopyOnWrite
5050
LocalOnWrite
9686:5050
原因はCopyOnWriteの実装に誤りがあり、ローカル変数領域を確保後に、グローバル変数をコピーしていないのではないかと思います。
**モデレーター 注記**
コミュニティ センター フォーラム に投稿されましたが、内容から判断して、こちらのフォーラムに移動しました。
家庭向け Windows | その他 | アプリ
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
質問作成者が受け入れた回答
-
Anonymous
2016-12-22T10:22:00+00:00 -
Anonymous
2016-12-21T00:18:21+00:00 次のソースを実行する。
$gv=9686
$funcs = @(
{
echo "GlobalOnRead"
$lv = $gv
Write-Output $lv
}
,
{
echo "CopyOnWrite"
$lv = $gv
$lv += 5050 - 9686
Write-Output $lv
}
,
{
echo "LocalOnWrite"
$lv = $gv
$gv += 5050 - 9686
Write-Output ([String]$lv + ":" + $gv)
}
)
for($i = 0; $i -lt $funcs.length; $i++)
{
Write-Output $funcs[$i].invoke()
}
結果
GlobalOnRead
9686
CopyOnWrite
5050
LocalOnWrite
9686:-4636
本来は次になるべきでは
GlobalOnRead
9686
CopyOnWrite
5050
LocalOnWrite
9686:5050
原因はCopyOnWriteの実装に誤りがあり、ローカル変数領域を確保後に、グローバル変数をコピーしていないのではないかと思います。
**モデレーター 注記**
コミュニティ センター フォーラム に投稿されましたが、内容から判断して、こちらのフォーラムに移動しました。
フィードバック Hub から フィードバックを