编程错误总结 博客分类: c++
程序员文章站
2024-03-19 10:25:28
...
- 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