> Dim a[99] As Long
> と
> Dim a As *Long
> a = malloc(400)
>
> は同じようにメモリを確保しているようですが、
> 後者の方が、free関数もあることを考えると行数も増えるし、
> 気を使いますよね。
> あえて malloc が存在するには理由があると思います。
> malloc の隠された威力を教えて頂けたらと思い投稿しました。
はい。隠された威力を教えてさしあげます。
コード: 全て選択
Dim b[256] As Byte
上のようなコードはメモリの静的確保と呼ばれています。たぶん。
コード: 全て選択
Dim b As BytePtr
b=malloc(256)
上のようなコードはメモリの動的確保と呼ばれています。たぶん...。
このように静的と動的の違いがあります。で、この違いが魅力でしょうか。
静的確保では以下のようなコードが通りません。
コード: 全て選択
Dim i=10 As Long
Dim b As Byte
しかし動的確保なら大丈夫です。
コード: 全て選択
Dim i=10 As Long
Dim b As BytePtr
b=malloc(i)
こういう説明だと分かり辛いかもしれませんが、
エディットボックスのような可変長データを取得することを考えると分かり易いでしょうか。
エディットボックスのデータ量は1KBなのに変数のサイズが256Bだったら入りませんよね?
しかし動的確保ならエディットボックスのデータ量だけ変数のサイズを決めることができます。
コード: 全て選択
Dim lpStr As LPSTR
lpStr=malloc(GetWindowTextLength(hEdit)+1)
えーと、分かって頂けたでしょうか?