欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编程错误总结 博客分类: c++  

程序员文章站 2024-03-19 10:33:58
...
  1. codeBlocks 中,sizeof() 函数统计错误,需要使用#pragma pack(push, 1)和#pragma pack(pop) 才能统计正确,__attribute__((packed));不正确
#if _MSC_VER
#pragma pack(push, 1)
#endif
template<typename T1, typename T2>
struct Pair{

	T1 first;

	T2 second;

	/// \brief constructor, default
	Pair(): first(0), second(0) {}

	/// \brief constructor, copy
	Pair(const Pair& _item): first(_item.first), second(_item.second) {}

	/// \brief constructor, component
	Pair(const T1& _first, const T2& _second) : first(_first), second(_second) {}

	/// \brief min value
	static Pair& min_value() {

		static Pair min_val = Pair();

		return min_val;
	}

	/// \brief max vlaue
	static Pair& max_value() {

		static Pair max_val = Pair(std::numeric_limits<T1>::max(), std::numeric_limits<T2>::max());

		return max_val;
	}

	/// \brief output
	friend std::ostream& operator << (std::ostream _os, const Pair& _item) {

		return _os << "first: " << _item.first << " second: " << _item.second << std::endl;

	}
}
#if _MSC_VER
;
#pragma pack(pop)
#else
__attribute__((packed));
#endif
  •  程序莫名其妙的错误,cur_bkt = 168时,LMS字符前继会小于等于当前字符,不只是逻辑错误还是程序bug,计划可以将该类用在pq推导的过程中,测试程序是否正常运行。(原因为windows系统文件读写存在错误,linux系统正确)
  • 用双端队列替换还是出错。
  • SAIS( string & _s, offset_vector_type *& _sa_reverse); 此行老是报错,原因为:string 为不可知类型,在前面加上  std::string,程序正确
  • 使用MyVector时,顺序读写和逆序读写过程,有next,next_remove,next_reverse,next_remove_reverse,如果顺序错,会导致莫名其妙的错误. 20180319和20180320两天时间来找推导SStar的错误
  • 在使用自己定义的宏时:#define __FILE_INFO__  std::cout << "Error occurrences. File name:" << __FILE__ << " , Line number:" << __LINE__ << " ,  Function name: " << __FUNCTION__<< ".\n"; std::cin.get(); ,程序停留在控制台,无任何反应,删除后正常
  • 32位整数和64位整数相乘容易出错。uint64 tp_size = ((tp_zero_number - buf_size * i) >= buf_size) ? buf_size : (tp_zero_number - buf_size * i); 如果buf_size * i 这两个数是32位,那么相乘会越界,造成计算文件偏移量出错。
  • std::vector成倍增长导致出现std::bad_alloc错误。
            typedef Pair<offset_type, offset_type> LMSSub_pair_type; // <pos, name>
    
            typedef TupleAscCmp1<LMSSub_pair_type> pair_comparator_type2;
    
            typedef MySorter<LMSSub_pair_type, pair_comparator_type2> sorter_type2;
    
            sorter_type2 *lms_substr_sorter = new sorter_type2(MAX_MEM/2); // pq_s has been deleted