【C++】メモリがロックされています。とか言われる

C++/メモリがロックされています。エラー

もらったソースを修正していたら、「メモリがロックされています。」とかいう例外エラーが発生して落ちる。

なんでだろうと思って調べてみると、C++で作成されている関数呼び出しで落ちているっぽい。

原因

C++のソースを追いかけてみると、以下のような処理があった。

SafeArrayAccessData(buff, *p);
if (buff != ret)
{
    return -1;
}
SafeArrayUnaccessData(buff);

SafeArrayAccessDataでメモリをロックした後に、条件分岐で抜けており、ロックが放置されていた状態だった。

以下のように修正。

SafeArrayAccessData(buff, *p);
if (buff != ret)
{
    SafeArrayUnaccessData(buff);
    return -1;
}
SafeArrayUnaccessData(buff);

単純なロック周りの不具合だったけど、C++あまり触らないのでパッと分からず…。

SAFEARRAYについて、ちゃんと理解しておこうと思った。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のPG・SEを経て、独立。 現在はとある企業のCTOと、変な名前の会社の社長をしてる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください