[访问 我以前可以访问的功能时出现段错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[访问 我以前可以访问的功能时出现段错误相关的知识,希望对你有一定的参考价值。
我正在尝试使用一个函数来检查条件,但是尽管起初我可以访问它,但是经过几次迭代后,我遇到了分段错误。我包括一些WriteLogs来查看函数的返回值。
这是我能够使用该功能的四次之一:
[Fri Jan 10 12:40:25:889]: [INFO][RouteInfoManager::UpdateRouteStatus] Driving Mode 2 passengers 0
[Fri Jan 10 12:40:25:889]: [INFO][RouteInfoManager::UpdateRouteStatus] IsAsva 1
[Fri Jan 10 12:40:26:060]: [INFO][DatasetParam::Int] DatasetParam_TypeException, setting speaker_gain
[Fri Jan 10 12:40:26:063]: [INFO][DatasetParam::Int] DatasetParam_TypeException, setting speaker_gain
[Fri Jan 10 12:40:26:175]: [INFO][DatasetParam::Str] DatasetParam_TypeException, setting cpu_version
并且,这是分段错误错误:
[Fri Jan 10 12:40:26:901]: [INFO][RouteInfoManager::UpdateRouteStatus] Driving Mode 2 passengers 0
[Thread 0xaa3ebb40 (LWP 27594) exited]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xa0f49b40 (LWP 27661)]
0x086d0273 in AlstomMP14::RouteInfoManager::UpdateRouteStatus (this=0x90889e8) at ../src/route/RouteInfoManager.cpp:283
283 WriteLog("[RouteInfoManager::UpdateRouteStatus] IsAsva %d", audioInfoProvider->IsAsvaAuthorisedInTrainCA());
这些是WriteLogs:
WriteLog("[RouteInfoManager::UpdateRouteStatus] Driving Mode %d passengers %d", trainDataProvider->GetDrivingMode(), trainDataProvider->GetDrivingMode() != DRIVING_MODE_AUTOMATIC
|| trainDataProvider->IsTrainWithoutPassengers());
WriteLog("[RouteInfoManager::UpdateRouteStatus] IsAsva %d", audioInfoProvider->IsAsvaAuthorisedInTrainCA());
以及这些涉及的功能:
bool AudioManager::IsAsvaAuthorisedInTrainCA()
/// 1) Return true if train CA is without passengers and driving mode is automatic.
return (!IsTrainCAWithoutPassengers() && trainDataProvider->GetDrivingMode() == DRIVING_MODE_AUTOMATIC);
bool AudioManager::IsTrainCAWithoutPassengers()
/// 1) Return true if driving mode is not automatic and train is without passengers.
return (trainDataProvider->GetDrivingMode() != DRIVING_MODE_AUTOMATIC
|| trainDataProvider->IsTrainWithoutPassengers());
您可以看到WriteLogs显示IsTrainCAWithoutPassengers()函数的返回,这是IsAsvaAuthorisedInTrainCA()函数的条件之一。
我不明白为什么,每次(2和0)的取值都相同,有时我可以访问IsAsvaAuthorisedInTrainCA(),有时我会遇到分段错误。
答案
WriteLog("[RouteInfoManager::UpdateRouteStatus] IsAsva %d", audioInfoProvider->IsAsvaAuthorisedInTrainCA());
假设WriteLog
的工作方式类似于printf
(或转发到printf
,则格式说明符与参数不匹配。
[%d
代表int
,而不是bool
。
您的程序有未定义的行为。
粘贴到int
。
以上是关于[访问 我以前可以访问的功能时出现段错误的主要内容,如果未能解决你的问题,请参考以下文章