SEGVる(デバッグウィンドウを表示しているときのみ)。

gosub *a:stop
*a: return 1e300

hsp3code.cpp void code_adddbg( char *name, double val ) が原因なんだけどどうしようかな。

  • snprintfを使う
  • バッファサイズを大きくする
#include <stdio.h>

int main( void ) {
	char tmp[64];
	double val = 1e60;
	sprintf( tmp, "%-36.16f", val );
	return 0;
}

とりあえず、こんなプログラムで強制終了されるのを確認した。

      • -

公式のhsp3.exe(HSP 3.1)だったらなぜかSEGVらないなー、と思ってOpenHSP 3.1を確認したら違うコードだった。

void code_adddbg( char *name, double val )
{
	char tmp[2048];
	sprintf( tmp, "%s\r\n%f\r\n",name,val );
	sbStrAdd( &dbgbuf, tmp );
}

うん、よく見たら HSP 3.1 では3.140000って表示なのに OpenHSP 3.2b1 では 3.1400000000000001 だった。(正確にはその後にスペースが続く