- 论坛徽章:
- 0
|
本帖最后由 joker0910 于 2012-12-18 21:45 编辑
- Linux ubuntu 2.6.32-40-generic #87-Ubuntu SMP Mon Mar 5 20:26:31 UTC 2012 i686 GNU/Linux
- Using built-in specs.
- Target: i486-linux-gnu
- Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5.1' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
- Thread model: posix
- gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
复制代码 这是我的运行/编译环境。 编译如下代码之后, 在本机执行, 立刻在终端上打印"Floating point exception"- 279 lunar_set_st *lunar_set_inter(lunar_set_st *pset_a, lunar_set_st *pset_b)
- 280 {
- 281 lunar_set_st *pnew = NULL;
- 282
- 283 if(pset_a == NULL) {
- 284 pnew = lunar_set_new(pset_b->size, pset_b->cmp, pset_b->hash);
- 285 } else if(pset_b == NULL) {
- 286 pnew = lunar_set_new(pset_a->size, pset_a->cmp, pset_b->hash);
- 287 } else if(pset_b->length < pset_a->length) {
- 288 return lunar_set_inter(pset_b, pset_a);
- 289 } else {
- 290 pnew = lunar_set_new(ARITH_MIN(pset_a->size, pset_b->size),
- 291 pset_a->cmp, pset_a->hash);
- 292 if(pnew == NULL) {
- 293 // dblog("get new set failed!"); /* 这句如果注释掉,那么程序正常, 如果没有注释掉,就会在执行时,报Floating point exception */
- 294 return NULL;
- 295 }
- 296 struct member *p = NULL;
- 297 int i = 0;
- 298 for(i = 0; i < pset_a->size; i++) {
- 299 p = pset_a->buckets[i];
- 300 while(p) {
- 301 if(lunar_set_member(pset_b, p->member)){
- 302 lunar_set_put(pnew, p->member);
- 303 }
- 304 p = p->link;
- 305 }
- 306 }
- 307 }
- 308
- 309 return pnew;
- 310 }
复制代码 代码中的dblog是在另一个头文件中定义的宏:- 115 #define dblog(fmt, args...) do{ \
- 116 printf("[%s:%d]"#fmt"\n", __func__, __LINE__, ##args); \
- 117 }while(0)
复制代码 上面那个函数在.h文件中的定义如下:- 85 /**
- 86 * \brief the inter opr, pset_a ^ pset_b
- 87 * \param two set struct
- 88 */
- 89 extern lunar_set_st *lunar_set_inter(lunar_set_st *pset_a,
- 90 lunar_set_st *pset_b);
- 91
复制代码
请问,这里没有浮点数操作,编译环境和运行环境也是相同的,为什么一个宏就会导致出现这种问题?难道是gcc在作怪?
|
|