friso在VC下 释放资源出现BUG

发布于 2021-11-25 04:10:25 字数 1665 浏览 882 评论 1

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猫烠⑼条掵仅有一顆心 2021-11-28 22:58:25

这个是一个老问题了. 先前在winnt下试过也遇到过这个问题.

解决方案:

1. 使用Release模式编译没有这个问题,不要使用debug,debug会出现这个问题.

 2.friso_config_t被设计为可重复使用. 所以你可以重复使用friso_config_t,直到你的friso进程退出,这个时候即使不释放也ok.(实在没办法的情况)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文