0Pricing
Zig Academy · レッスン

Testing Allocatorでメモリリークを検出する

メモリ関連のバグを自動的に検出します。

「Testing Allocatorでメモリリークを検出する」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。

メモリバグは見つけにくい

すべての値のチェックに合格していても、解放を忘れるとプログラムはメモリリークを起こします。Zigには、まさにこの問題を検出するテスト用ツールがあります。

testing.allocatorを使う

テスト内では、特別なアロケーターをstd.testing.allocatorから取得できます。ヒープメモリの割り当てが必要な場所で使用します。

const a = std.testing.allocator;

すべての割り当てを追跡する

testing.allocatorは、割り当てたすべてのメモリブロックを記録します。テストが終了すると、それぞれが返却されたかどうかを確認します。

リークするとテストが失敗する

1つでも割り当てたメモリを解放しないと、testing.allocatorがリークを報告してテストを失敗させます。どの解放が不足しているかも示されます。

テスト内でメモリを割り当てる

実際のコードと同じように、アロケーターにメモリを要求します。ここではallocが10バイトのバッファーを確保するため、後で解放する必要があります。

const buf = try a.alloc(u8, 10);

deferで解放する

各割り当てと、それを解放するdeferを組み合わせます。クリーンアップはすぐに予定されるため、テストが途中で失敗しても実行されます。

const buf = try a.alloc(u8, 10);
defer a.free(buf);

freeを忘れてバグを検出する

そのdeferを削除すると、リークレポートが表示されてテストが失敗します。このようにallocatorは、見過ごされていたバグを明確で修正可能な失敗に変えます。

二重解放も検出する

同じチェック機能付きallocatorは、同じブロックを2回解放した場合や、渡されていないメモリを解放した場合も検出します。どちらも典型的なクラッシュの原因です。

コードに渡す

メモリを割り当てる関数は、アロケーターをパラメーターとして受け取ります。テストではtesting.allocatorを渡し、そのメモリも追跡対象にします。

const list = try buildList(std.testing.allocator);

作成したデータをクリーンアップする

関数が割り当てたものは、テストで解放する必要があります。呼び出しの直後にdeferを追加し、返されたデータをfreeまたはdeinitします。

defer list.deinit();

メモリ解放をテストする

リークがビルドを失敗させるため、合格したテストはすべて、メモリの割り当てと解放が釣り合っていることを証明します。この安心感はtesting.allocatorならではのものです。

クイックチェック

std.testing.allocatorでメモリを割り当てたものの、バッファーを解放しないテストを実行しました。どうなるでしょうか。

まとめ

std.testing.allocatorを使って、リークや二重解放を無料で検出しました。各allocとdeferによるfreeを組み合わせれば、テストをクリーンに保てます。✅

よくある質問

「Testing Allocatorでメモリリークを検出する」レッスンは無料ですか?

はい。「Testing Allocatorでメモリリークを検出する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。

「Testing Allocatorでメモリリークを検出する」で何を学びますか?

メモリ関連のバグを自動的に検出します。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Zig Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Testing Allocatorでメモリリークを検出する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このZig Academyレッスンでコードを書いて実行できますか?

はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. testブロックを書く
  2. std.testingによるアサーション
  3. Testing Allocatorでメモリリークを検出する
  4. テストの実行と絞り込み
← Zig Academyに戻る