ab.com コミュニティ https://www.activebasic.com/forum/ |
|
INPUT命令(N88BASICモード)にてSTRING型強制終了 https://www.activebasic.com/forum/viewtopic.php?t=1606 |
ページ 1 / 1 |
作成者: | たかせ [ 2006年10月08日(日) 10:55 ] |
記事の件名: | INPUT命令(N88BASICモード)にてSTRING型強制終了 |
たかせです。 v05cp3にて INPUT命令(N88BASICモード)にてSTRING型のデータだと強制終了します。 #prompt 'ps '#consoleにすると 'dos_console.sbp(72) - "_System_HeapStringFree" 無効な識別子です 'dos_console.sbp(73) - "_System_HeapStringAlloc" 無効な識別子です 'というエラーが出てコンパイルが中断します。 DIM BYTEDATA AS BYTE DIM CHARDATA AS CHAR DIM INTEDATA AS INTEGER DIM LONGDATA AS LONG DIM SIGLDATA AS SINGLE DIM DOBLDATA AS DOUBLE DIM STRGDATA AS String INPUT "BYTE = ",BYTEDATA PRINT "BYTE =";BYTEDATA INPUT "CHRA = ",CHARDATA PRINT "CHRA =";CHARDATA INPUT "INTE = ",INTEDATA PRINT "INTE =";INTEDATA INPUT "LONG = ",LONGDATA PRINT "LONG =";LONGDATA INPUT "SIGL = ",SIGLDATA PRINT "SIGL =";SIGLDATA INPUT "DOBL = ",DOBLDATA PRINT "DOBL =";DOBLDATA 'INPUT "STRG = ",STRGDATA STRGDATA = ZeroString(20) STRINPUT(STRGDATA) PRINT "STRG =";STRGDATA Input$(1) SUB STRINPUT(O1 AS *BYTE) DIM DUMMY AS BYTE INPUT "STRG = ",DUMMY 'FillMemory(StrPtr(STRGDATA),20,32) lstrcpy(O1,_PromptSys_InputStr) END SUB END ご確認願います。 ちなみに #consoleにすると dos_console.sbp(72) - "_System_HeapStringFree" 無効な識別子です dos_console.sbp(73) - "_System_HeapStringAlloc" 無効な識別子です というエラーが出てコンパイルが中断します。 |
作成者: | たかせ [ 2006年10月08日(日) 11:03 ] |
記事の件名: | 追記 |
たかせです。 該当箇所コメントはずしてみてください。 |
作成者: | OverTaker [ 2006年10月08日(日) 12:22 ] |
記事の件名: | |
Ver.5.0 での#N88BASIC,#prompt,#consoleの対応状況については、現在遅れている状態です。 いずれ対応するのだとは思いますが、安全に使用したいのなら、4.0以前のActiveBasicを使うことをお勧めします。 ところで、#N88BASICと#promptは指定するだけでアクセス違反になるのですが、うちの環境だけでしょうか? |
作成者: | たかせ [ 2006年10月08日(日) 13:37 ] |
記事の件名: | |
> Ver.5.0 での#N88BASIC,#prompt,#consoleの対応状況については、現在遅れている状態です。 > いずれ対応するのだとは思いますが、安全に使用したいのなら、4.0以前のActiveBasicを使うことをお勧めします。 了解しました。ありがとううございます。 ところで、9月24に投稿された件も同様ですね。 > > ところで、#N88BASICと#promptは指定するだけでアクセス違反になるのですが、うちの環境だけでしょうか? すみません意味がいまいちよくわかりませんが、 自分のPCでのみしか確認していません。 PCはWIN-XP,1.5Ghz,256MBです。 見当違いならごめんなさい。 |
作成者: | OverTaker [ 2006年10月08日(日) 15:31 ] |
記事の件名: | |
引用: Ver.5.0 での#N88BASIC,#prompt,#consoleの対応状況については、現在遅れている状態です。
すみません。やっぱりこの投稿は訂正させていただきます。いずれ対応するのだとは思いますが、安全に使用したいのなら、4.0以前のActiveBasicを使うことをお勧めします。 ところで、#N88BASICと#promptは指定するだけでアクセス違反になるのですが、うちの環境だけでしょうか? もう一度CP3をダウンロードして、きちんと上書きできているか確認してみてください。 もし、それでもおかしい場合はよくわかりません。というのも、うちのXP Home x86 SP2で#N88BASICまたは#consoleを書いただけのプログラムを実行しますと、アクセス違反が起きてしまうのです。しかし、今日Vista RC2をインストールしましたので、それで実行してみると問題なく実行することができました。たかせさんが最初に提示されたコードも問題なく実行できています。 他にも同じ症状の人はいるでしょうか?また、何かわかる方がいたら教えていただきたいです。 |
作成者: | たかせ [ 2006年10月28日(土) 17:26 ] |
記事の件名: | 状況判明しました。 |
たかせです。 いろいろ、調べてみたらprompt.sbpのinputというsub内で、 reallocされていないことが判明しました。 その原因でmemcpy関数で強制終了されます。 なお、逃げ道は2~3とおりあります。 一例では、 inputの直前でzerostring関数で文字列エリアを確保する。 promptのinputにあるreallocをコメントアウトする。 これで正常に動作することが確認できました。 でもこれはあくまでも暫定手段です。 |
作成者: | たかせ [ 2006年10月28日(土) 17:47 ] |
記事の件名: | OverTakerさんへ |
たかせです。 >うちのXP Home x86 SP2で#N88BASICまたは#consoleを書いただけのプログラムを実行しますと、アクセス違反が起きてしまうのです。 うちのpcはxpなので上記の現象は発生しませんでした。 ちなみにどこでアクセス違反が起きますか? >しかし、今日Vista RC2をインストールしましたので、それで実行してみると問題なく実行することができました。たかせさんが最初に提示されたコードも問題なく実行できています。 これって不思議ですね。うん~ |
作成者: | OverTaker [ 2006年10月28日(土) 18:51 ] |
記事の件名: | |
たかせさん、わざわざ返信ありがとうございます。 上記の#N88BASICと#promptのアクセス違反の件ですが、滅多に起こらないのか、私のXP環境でしか再現できたことはありません。また、Ver.4.0のActiveBasicで確認してみたところ、こちらもアクセス違反が起きてしまっています。 このことから、間違いなくWindowsがおかしいというわけなので、放置しています。ちなみに、_System_realloc()でアクセス違反になります。 引用: いろいろ、調べてみたらprompt.sbpのinputというsub内で、
ところで、そちらのアクセス違反も気になるところではありますね。本来正しく動作するはずのものですので、realloc()されていないというのはよくわかりませんが、少なくとも、正常に動作するうちのVista環境では、そのような奇怪なことをしなくても、問題なく動作します。reallocされていないことが判明しました。 その原因でmemcpy関数で強制終了されます。 他にも、このような不思議な現象に見舞われている人はいないでしょうか? 最後に、今更気がつきましたが、アクセス違反が起きていたのは、#N88BASICと#promptです。以前の投稿に誤りがありましたので一応書いておきます。 |
作成者: | 高信期 [ 2006年10月28日(土) 22:41 ] |
記事の件名: | |
>OverTakerさん わたしの環境では#console以外で、メインのウィンドウを閉じるとアクセス違反になります。 どうもウィンドウプロシージャがWM_DESTROYを受ける前後でアクセス違反が起きるようです。 以前にもここで報告しましたが、環境依存っぽいのであきらめています。 |
作成者: | たかせ [ 2006年10月29日(日) 12:42 ] |
記事の件名: | 高信期さんへ |
たかせです。 >OverTakerさん わたしの環境では#console以外で、メインのウィンドウを閉じるとアクセス違反になり>ます。 >どうもウィンドウプロシージャがWM_DESTROYを受ける前後でアクセス違反が起きるようです。 >以前にもここで報告しましたが、環境依存っぽいのであきらめています。 僕のPCでも同じ現象がたまに起きます。 大半は、プログラムのミスが圧倒てきです。 たとえば、alloc/freeの指定方法が不正だったり。 string型データにおいて確保されたエリア以上の長さの文字列を設定する。 そこでもう少し詳細を教えてください。 |
作成者: | 高信期 [ 2006年10月31日(火) 00:30 ] |
記事の件名: | |
OverTakerさんが書いているとおり、 コード: #promptとするだけでウィンドウを閉じるとアクセス違反になります。 また、 コード: #prompt Dim A As String Input Aとすると、入力終了後INPUT_FromPrompt関数で落ちます。 現在開発している環境(Windows Xp Home)ではOSのサービスをかなり切っているのですが、 サービスをデフォルトのままにしている別のユーザーに切り替えてデバッグすると何事も無く終了できるので、 そこら辺に問題があると思うのですが…。 |
作成者: | OverTaker [ 2006年10月31日(火) 21:24 ] |
記事の件名: | |
今日、さらに詳しいことがわかりました。 デバッグ実行ではアクセス違反になるのですが、リリースコンパイルをすると正しく動作するのです。環境は、XP Home x86 SP2、AB3.13/AB4.24/AB5.0 CP3いずれも同様です。 AB5.0だけでしたら、デバッガのバグだと予想できるのですが、昔正常に動作していたAB3.13やAB4.24まで正常に動作しないようなので、やはりXPや環境に、何か問題がありそうです。 引用: OverTakerさんが書いているとおり、
ちなみに、うちはウィンドウを閉じる時ではなく、起動時にアクセス違反が起きます。コード: #promptとするだけでウィンドウを閉じるとアクセス違反になります。 追記: 引用: 現在開発している環境(Windows Xp Home)ではOSのサービスをかなり切っているのですが、
セーフモードで起動して確認してみたところ、何も変わりませんでした。サービスはあまり関係ないようです。別のユーザーに切り替えても、特に変化はありませんでした。
サービスをデフォルトのままにしている別のユーザーに切り替えてデバッグすると何事も無く終了できるので、 そこら辺に問題があると思うのですが…。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |