Haruyuki Mohri

毛利春幸のブログです。

CodeGuardでRTLを使う場合の注意

CodeGuardとは

bcc32で構文規則に違反していないためにコンパイラでは検出されないエラーを通知します。
f:id:mojeld:20170928112134p:plain
実行時ライブラリを追跡とマルチスレッド アプリケーションを完全にサポート。

機能
メモリおよびリソースの使用状況確認
関数呼び出しの検証

利用方法

プロジェクトオプションから|C++コンパイラデバッグ
CodeGuardを有効にする = true すると設定されます。
f:id:mojeld:20170928112627p:plain

void __fastcall TForm2::Button1Click(TObject *Sender)
{
    int* i = new int[1000];
}

f:id:mojeld:20170928113720p:plain

RTLを利用する場合

RTLを利用する場合プロジェクトオプション内の
C++リンカ|動的RTLとリンクする = false
実行じパッケージ|実行時パッケージを使ってリンク = false
上記の設定を行う必要があります。

TObject*をクリエイトする

void __fastcall TForm2::Button1Click(TObject *Sender)
{
    TObject* o = new TObject();
}

f:id:mojeld:20170928114101p:plain

動的RTLとリンクする = false と実行時パッケージを使ってリンク = false を設定する事で、下記の確認ができました。
「 The memory block (0x02723AC0) [size: 8 bytes] was allocated with SysGetMem」