Linux c语言编程./a.out运行提示段错误 问题收集
段错误,几种可能:
一、函数没有头文件(是的,有时候gcc不会提示没有头文件); 二、函数重复定义,全局变量定义后、局部变量又定义了。(一般是调试的时候,代码改来改去,遗漏所致)
三、Linux 发行版系统差异,
虽然都是 Linux 内核,同样的函数 Ubuntu 和 CentOS 需要的头文件就不一样, 具体查看 man 手册
四、多线程中,取消线程后,又sleep(1),这时可能线程内存区域都被系统回收,程序又去读,也会出现 “段错误”
具体查看,下面 "代码示例一"
代码示例一:
printf("准备取消 %ld 线程!\n", t_ID);
pthread_cancel( t_ID );
//sleep(1); // 这行会导致 "段错误"
// 分析可能原因:
// 取消线程后,执行 tryjoin 还有线程信息,
// 但是,等待1秒后,线程信息被系统回收,对应
// 内存不能读写,这是再执行 tryjoin 就产生段错误
printf("等待 func 线程退出!\n");
// 用 pthread_join 函数,不管线程什么状态,都会去接合,也会段错误
//if( ret_join = pthread_join( t_ID, (void *)&retval) )
// 所以还是用 pthread_tryjoin_np 尝试结合,如果有问题,直接返回不等待
if( ret_join = pthread_tryjoin_np( t_ID , (void*)&retval))
{
fprintf( stderr,"线程被取消,接合失败!\n返回值: %s\n", strerror(ret_join) );
} else {
printf("线程接合,func 函数退出值:%d\n", *retval);
}
浙公网安备 33010602011771号