- 论坛徽章:
- 0
|
之前我自己作的 scws-1.0.x 分词系统在各平台均有长期稳定运行并且没有出错, 跟踪了很久也没有发现有内存方面的问题.
但非常奇怪的是, 在 Ubuntu-7.10 内核 2.6.22-14-server, gcc version 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)
这个环境下, 竟然出现段地址错误, 导到非法.
但由于这个调用是在一个 .so 共享库里, 不知怎么样才能进入它的代码段(list出不来), 如果我把共享库静态连接在一起, 那么程序又是正确运行没有段地址错误,
真是令人抓狂. 开启 -g 选项后能在主程序的 backtrace 中看到几个调用栈, 但实在看不出来哪儿错了.
代码段循环体是用 for() 的, 后来我改成 do {} while(); 竟然就好了, 也可以链接到其它文件中去了..... 迷茫!!
[能正确运行的代码]
- xtree_t xdb_to_xtree(xdb_t x, xtree_t xt)
- {
- int i = 0;
- xptr_st ptr;
- if (!x)
- return NULL;
- if (!xt && !(xt = xtree_new(x->base, x->prime)))
- return NULL;
- do
- {
- _xdb_read_data(x, &ptr, i * sizeof(xptr_st) + sizeof(struct xdb_header), sizeof(xptr_st));
- _xdb_to_xtree_node(x, xt, &ptr);
- }
- while (++i < x->prime);
- return xt;
- }
复制代码
2. 运转出错(段地址错误)的代码
- xtree_t xdb_to_xtree(xdb_t x, xtree_t xt)
- {
- int i;
- xptr_st ptr;
- if (!x)
- return NULL;
- if (!xt && !(xt = xtree_new(x->base, x->prime)))
- return NULL;
- for(i=0; i< x->prime; i++)
- {
- _xdb_read_data(x, &ptr, i * sizeof(xptr_st) + sizeof(struct xdb_header), sizeof(xptr_st));
- _xdb_to_xtree_node(x, xt, &ptr);
- }
- return xt;
- }
复制代码 |
|