Ticket #5 (closed バグ報告: fixed)

Opened 12 years ago

Last modified 10 years ago

mist::vector2をsetに入れ、set::count()関数を実行すると実行時エラーを発生することがある

Reported by: anonymous Owned by: ddeguchi
Priority: Milestone:
Component: Mist Version: 1.0
Keywords: Cc:

Description

非常に便利なライブラリとして研究用のプログラムに利用させていただいております。

突然で申し訳ないのですが、スナップショット Ver.1.3 を用いて次のコードをコンパイルすると、コンパイルは通りますが実行時にエラーを発生するようです。

#include <mist/config/set.h>
#include <mist/vector.h>
#include <set>
#include <iostream>
int main(void){
    typedef mist::vector2<int> v2i;
    std::set<v2i> set1;
    set1.insert(v2i(0,81));
    set1.insert(v2i(2,83));
    std::cout << set1.count(v2i(1,84)) << std::endl;
    // ↑この行で実行エラーを発生します
}

set1 に入っている値と count()関数の引数にいれる値との関係によって、実行時エラーが発生したりしなかったりするようです。問題の行の v2i(1,84) の値を変えたときのそれぞれの結果は次のようになりました

v2i(0,81) : 正常(1)
v2i(1,82) : 正常(0)
v2i(1,84) : 実行時エラー
v2i(0,80) : 正常(0)
v2i(3,82) : 実行時エラー

こちらの環境は

OS: Windows XP SP2

開発環境: Visual C++ 2005 Express Edition

です。また、std::set を mist::set に変えても同様にエラーを発生するようです。

Change History

comment:1 Changed 12 years ago by ddeguchi

  • Owner changed from somebody to ddeguchi

comment:2 Changed 12 years ago by ddeguchi

  • Status changed from new to assigned

comment:3 Changed 12 years ago by ddeguchi

バグの報告ありがとうございます. 報告いただいたバグを,コミット [833] で修正しました.
バグの原因は,==演算子と<演算子の間で矛盾が生じていたためです. そのため,== の判定がうまくいかなかったのが原因でした. Subversion経由で最新のソースを落とし確認してもらえますか?

comment:4 Changed 12 years ago by anonymous

svnでダウンロードしたソースで確認させていただきました

#include <mist/config/set.h>
#include <mist/config/color.h>
#include <mist/config/stereo.h>
#include <mist/quaternion.h>
#include <mist/vector.h>
#include <iostream>

int main(void){
	using namespace mist;
	typedef stereo<short> ss;
	typedef vector2<int> v2i;
	typedef vector3<int> v3i;
	typedef rgb<unsigned char> rgbb;
	typedef quaternion<double> qd;
	set<ss> set1;
	set<v2i> set2;
	set<v3i> set3;
	set<rgbb> set4;
	set<qd> set5;
	set1.insert(ss(1,2));
	set1.insert(ss(1,4));
	set2.insert(v2i(1,2));
	set2.insert(v2i(1,4));
	set3.insert(v3i(1,2,3));
	set3.insert(v3i(1,4,3));
	set4.insert(rgbb(1,2,3));
	set4.insert(rgbb(1,4,3));
	set5.insert(qd(0,1,2,3));
	set5.insert(qd(0,1,4,3));
	std::cout << set1.count(ss(2,3)) << std::endl;
	std::cout << set2.count(v2i(2,3)) << std::endl;
	std::cout << set3.count(v3i(2,3,3)) << std::endl;
	std::cout << set4.count(rgbb(2,3,3)) << std::endl;
	std::cout << set5.count(qd(0,2,3,3)) << std::endl;
}

正常に動作するようになりました。ありがとうございます。 しかし、確認中に比較演算がおかしいらしいことを発見したので、その件は他のチケットで投稿します。

comment:5 Changed 12 years ago by anonymous

  • Status changed from assigned to closed
  • Resolution set to fixed
Note: See TracTickets for help on using tickets.