"CArray" (コンパイルタイプ)

"CArray"::[type]

指定された型の要素を含む,C言語と互換の配列型を表す.

詳細

  • "CArray"::[t]はC言語のt*に等しい.
  • "CArray"を持つオブジェクトは自動的にはメモリ管理されないので,手動で解放しなければならない.
  • "CArray"はC言語と互換の外部ライブラリとインタラクトする際に使うことができる.
  • 内部的には型"CArray"を持つオブジェクトはポインタで表される.

コンストラクタ

特性

  • "CArray"::[type]carrInformation[carr,"ElementType"]type を与える.
  • FromRawPointer[carr,offset]はC配列 carr に指標を付ける.指標は0から始まる.

変換

    配列

  • 配列型は管理されたC配列にCastすることができる.サポートされる配列型には"ListVector""NumericArray""PackedArray"がある.
  • "RawPointer"および"OpaqueRawPointer"

  • CastはC配列を未加工のポインタにビットキャストしたり未加工のポインタからビットキャストするために使うことができる.

ランタイムエラー

  • 指標付けは安全ではない操作であり,C配列の終りを超えた指標付けはクラッシュを起こす場合がある.

例題

すべて開くすべて閉じる

  (2)

メモリ管理されたC配列を作成し,その要素の中の一つにアクセスする:

引数としてC配列を取る,外部ライブラリからの関数を表す:

C配列を作成しその関数を呼び出すプログラムをコンパイルする:

考えられる問題  (1)

"Managed"オブジェクトの外部で生成されたC配列は自動的にメモリ管理されないので,手動で解放しなければならない.管理されないC配列を作成する関数をコンパイルする:

この関数はメモリをリークする:

DeleteObjectを使って手動でC配列を解放する:

結果の関数はメモリをリークしない: