こんにちは、uchanです。
C++プログラミングをしていて、良く解らない不具合にぶち当たったので、ここに投稿し
ます。
以下のプログラムを、osa_dir2で「make run」コンパイルし、実行させてみたところ、例
外(CS:EIP = 0010:00002415)が発生し、止まります。コンパイラは、cc1.exeから
cc1plus.exeに、com_mak.txtのCC1を、
CC1 = $(TOOLPATH)cc1plus.exe -I$(INCPATH) $(CC1OPT) -Os -Wall -quiet
という風に書き換えることによって変更させて使っています。
なにやら、MyClassクラスのコンストラクタにif文や、for文、do-while文、変数宣言、変
数に値を代入する文などが一定数以上含まれていると、このエラーが発生するようです。
極端な例は、正常に動いていたのに「i = 0;」を書き足すと、このエラーが発生する、な
どです。
コンストラクタだからいけないのかなとも思ったので、void test()と言う関数をMyClass
の中に作って、そこにコンストラクタの処理内容をすべて移し、fs.test();とやってみて
もやはり同じ例外が発生しました。
ちなみに、STACKSIZE = 512k、MALLOCSIZE = 256kとしています。(十分だと思います)
どこか、誤っているところがあるのでしょうか。もしかしたらコンパイラがいけないので
しょうか。どうかご回答をお願いします。
----------------------------------hellocp3.cpp----------------------------------
#define AUTO_MALLOC 0
extern "C"
{
#include <guigui00.h>
void OsaskMain();
};
class MyClass
{
int i;
public:
MyClass()
{
if (1 == 1) {
if (0 != 0)
0;
}
if (1 == 1) {
if (0 != 0)
0;
}
i = 0;
i = 5;
}
};
LIB_WINDOW *win;
LIB_TEXTBOX *title;
void OsaskMain()
{
lib_init(0);
// ウィンドウオープン
win = lib_openwindow(AUTO_MALLOC, 0x0200, 8 * 20, 16 * 5);
title = lib_opentextbox(0x1000, AUTO_MALLOC, 0, 10, 1, 0, 0, win, 0x00c0, 0);
lib_putstring_ASCII(0x0000, 0, 0, title, 0, 0, "hellocp3");
MyClass fs;
lib_waitsignal(0x0001, 0, 0);
}