本人出异常的代码片段
// 代码块
{
glob_t pglob;
if(S_ISDIR(statbuf.st_mode))
{
glob(path,0,NULL,&pglob);
}
globfree(&pglob);
}
对上述代码块分析,声明局部结构体变量pglob时,其初始值是不会初始化的。所以,结构体内部char **gl_pathv 的默认值就不确定了,这时如果if条件不成立的话,globfree释放一个可能非malloc的地址就会报错了。
综上,正确的使用方式应该是
// 代码块
{
glob_t pglob;
if(S_ISDIR(statbuf.st_mode))
{
glob(path,0,NULL,&pglob);
globfree(&pglob);
}
}
结论:globfree()函数调用前一定保证glob()函数的调用!