Newが異常な動作をする

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
Sinryow
記事: 141
登録日時: 2005年5月31日(火) 09:34
お住まい: 北海道
連絡する:

Newが異常な動作をする

#1 投稿記事 by Sinryow »

コード: 全て選択

#N88BASIC
Dim r As BytePtr
r=New[4] Byte
lstrcpy(r, "123")
Print MakeStr(r)
Delete r
これを実行すると,デバッグ実行ではアクセス違反で止まり,リリースコンパイルで実行すると強制終了となってしまいました。
調査お願いします。
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
山本
Site Admin
記事: 535
登録日時: 2005年5月30日(月) 15:08
連絡する:

#2 投稿記事 by 山本 »

New演算子はクラス以外の型を指定できません。その旨のエラーがでるよう、次回のバージョンアップで修正しますので、ご了承ください。

参照:
http://www.discoversoft.net/help_center ... or/New.htm

クラス以外の型のメモリ確保を行うときは、従来どおり、malloc(またはcalloc)、freeを利用してください。

なぜNew演算子でクラス以外の型を扱えなくするのかといった疑問が出てくることと思いますが、それには以下のような理由があります。

・New演算子は内部でcallocを呼び出してオブジェクトのメモリを確保している
・Delete演算子も同様に、内部でfreeを呼び出している
・New演算子を使うとreallocできない
・New演算子でクラス型以外のものを生成できるようにすると、オブジェクトか、通常の型かを見分けるための冗長的なコードを埋め込まなければならない
・様々な型に対してNew演算子を使うより、クラス型に限定したほうがオブジェクトの動きを把握しやすい
返信する