friso在VC下 释放资源出现BUG
friso_t friso; friso_config_t config; friso_task_t task; //1.实例化一个friso分词实例。 friso = friso_new(); //2.创建一个friso分词配置。 config = friso_new_config(); //3. 依据给定的friso.ini中快捷初始化friso。 if ( friso_init_from_ifile(friso, config, "friso/friso.ini") != 1 ) { printf("fail to initialize friso and config."); goto err; } //4.创建一个分词任务: task = friso_new_task(); //3.设置分词任务的分词文本: friso_set_text( task, "要被分词的文本"); //4.分词主程序: // //1.6.1以前的版本: // while ( ( friso_next( friso, config, task ) ) != NULL ) { // //printf("%s[%d,%d]/ ", task->hits->word, task->hits->type, task->hits->offset ); // printf("%s/ ", task->hits->word ); // } //1.6.1及以后的版本: while ( ( config->next_token( friso, config, task ) ) != NULL ) { //printf("%s[%d, %d, %d] ", task->token->word, // task->token->offset, task->token->length, task->token->rlen ); printf("%s ", task->token->word ); } //5.释放相关资源: friso_free_task( task ); err: friso_free_config(config);//此处BUG friso_free(friso);
跟踪到
void __cdecl _free_base (void * pBlock) { int retval = 0; if (pBlock == NULL) return; RTCCALLBACK(_RTC_Free_hook, (pBlock, 0)); retval = HeapFree(_crtheap, 0, pBlock);//此处 if (retval == 0) { errno = _get_errno_from_oserr(GetLastError()); } }
该如何解决呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个是一个老问题了. 先前在winnt下试过也遇到过这个问题.
解决方案:
1. 使用Release模式编译没有这个问题,不要使用debug,debug会出现这个问题.
2.friso_config_t被设计为可重复使用. 所以你可以重复使用friso_config_t,直到你的friso进程退出,这个时候即使不释放也ok.(实在没办法的情况)