Linux c语言编程./a.out运行提示段错误 问题收集
段错误,几种可能:
12<strong>一、</strong>函数没有头文件(是的,有时候gcc不会提示没有头文件);
<strong>二、</strong>函数重复定义,全局变量定义后、局部变量又定义了。(一般是调试的时候,代码改来改去,遗漏所致)<br>三、Linux 发行版系统差异,<br> 虽然都是 Linux 内核,同样的函数 Ubuntu 和 CentOS 需要的头文件就不一样, 具体查看 man 手册 <br>四、多线程中,取消线程后,又sleep(1),这时可能线程内存区域都被系统回收,程序又去读,也会出现 “段错误”<br> 具体查看,下面
"<strong>代码示例一</strong>"
代码示例一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2022-04-04 openwrt(LEDE)手动安装Luci管理页控制台