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);
}

  

posted @ 2023-04-04 12:13  悟透  阅读(386)  评论(0)    收藏  举报