首页 > 编程语言 >C++编译并运行后出现Process finished with exit code 139 (interrupted by signal 11:SIGSEGV),程序意外终止.

C++编译并运行后出现Process finished with exit code 139 (interrupted by signal 11:SIGSEGV),程序意外终止.

时间:2024-10-09 15:50:46浏览次数:9  
标签:11 code CMAKE SIGSEGV CXX set FLAGS march O3

问题描述:

        代码运行意外终止,报错信息为Process finished with exit code 139 (interrupted by signal 11:SIGSEGV)

CMakeList文件如下:

cmake_minimum_required(VERSION 3.26)
project(SLAM)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "-std=c++14 -march=native -O3")
set( CMAKE_BUILD_TYPE "Release" )

分析原因:

        在排除代码无误后,进一步分析配置文件CMakeList.txt,发现原来参考配置文件的配置信息与自己电脑的配置不相符,

set(CMAKE_CXX_FLAGS "-std=c++14 -march=native -O3")

      进一步分析,set(CMAKE_CXX_FLAGS "-march=native -O3")是指示编译器生成针对当前主机的最佳优化代码。它将启用所有特定于当前处理器的指令集扩展,例如 SIMD 指令等。这样可以让程序在该硬件上运行得更快。03表示这是一个优化级别标志,表示启用高级别的优化。

         结合系统提示信息,SIGSEGV是一种常见的运行时错误,通常意味着程序试图访问不合法的内存地址。可能有处理指针、数组或者在访问对象时没有正确初始化的情况导致的。

        最终得出的结论是,set(CMAKE_CXX_FLAGS "-std=c++14 -march=native -O3")使用了 -march=native-O3,这会进行激进的优化,可能导致某些变量在调试时被优化掉,增加了出错的可能性。如果代码中存在未定义行为或者访问了已优化掉的变量,这可能会导致段错误(SIGSEGV)。

解决办法:

        不使用 -march=native 可以降低处理器特定优化可能引入的风险。更少的硬件特定优化使得代码更具可移植性,并减少了因编译器优化导致的错误。当然,如果你正在开发和调试程序,建议使用 -O0 -g,以便于跟踪和识别问题。

set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS "-O0 -g")

        正确的配置文件设置:

cmake_minimum_required(VERSION 3.26)
project(SLAM)


set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set( CMAKE_BUILD_TYPE "Release" )
set( CMAKE_CXX_FLAGS "-std=c++17 -O3" )

        最后代码成功运行:

        

标签:11,code,CMAKE,SIGSEGV,CXX,set,FLAGS,march,O3
From: https://blog.csdn.net/keshi12354/article/details/142788317

相关文章

  • (LeetCode 热题 100) 1143. 最长公共子序列(动态规划dp)
    题目:1143.最长公共子序列思路:经典动态规划dp题型,时间复杂度为0(n^2)。C++版本:classSolution{public:intlongestCommonSubsequence(stringtext1,stringtext2){intn=text1.size(),m=text2.size();//状态f[i][j]表示:text1[0,i]和text2[0......
  • P11154 【MX-X6-T0】Arcaea Scoring System
    题目传送门题意简述在某款游戏中,有着nnn个物件,每个物件都有四种判定方式。大Pure判定,该玩家获得......
  • 011-关于复杂业务接口产生的Bo类字段污染的思考
    @RequestParam(value="xxx",required=false)这种参数接收模式,可以在一个接口接收平行的多个字段,更为灵活。1publicBaseResponseInfogetDetailList(@RequestParam("xxx0")Longxxx0,2@RequestParam("xxx1")Stringxxx1......
  • Win11安装哪个版本好?
    Windows11年度大更新24H2已经正式发布,由于版本特别多,有一些同学不知道安装哪个版本,此前在文章中零散的介绍过每一个版本的区别,经常有小伙伴留言问这些版本的区别,今天把他们汇总到一起,并结合最新发布的一些版本进行介绍它们的区别与联系。下图是我用网盘分享的ISO下载,可以看到版本......
  • 学习011-08-03 Numeric Properties(数字属性)
    NumericProperties(数字属性)XAFsupportsPropertyEditorsfornumericdatatypes(byte,int,decimal,long,correspondingnullabletypes,etc.)onallplatforms.However,WinForms,ASP.NETWebForms,andBlazorUIapplicationsusedifferentformattingru......
  • 学习011-08-03-01 Numeric Properties in XPO(XPO中的数字属性)
    NumericPropertiesinXPO(XPO中的数字属性)TheexamplebelowillustrateshowtoimplementNumericPropertiesinanXPOpersistentclass.下面的示例说明了如何在XPO持久类中实现数字属性。C#privatedoubledoubleProperty;publicdoubleDoubleProperty{g......
  • 学习011-08-03-02 Numeric Properties in EF Core(EF Core中的数字属性)
    NumericPropertiesinEFCore(EFCore中的数字属性)TheexamplebelowillustrateshowtoimplementNumericPropertiesinanEFCoreclass.下面的示例说明了如何在EFCore类中实现数字属性。C#publicvirtualdoubleDoubleProperty{get;set;}publicvirtual......
  • 莫托曼机器人GP110B操作手柄故障维修全攻略
     莫托曼机器人GP110B操作手柄故障机器人维修全攻略       一、前言       莫托曼机器人GP110B操作手柄是机器人控制系统的重要组成部分,它允许操作人员对机器人进行精确的控制和操作。然而,在使用过程中,操作手柄可能会出现各种故障。本文将为您提供一......
  • 两台笔记本,操作一台,另一台作为双屏显示简直太爽了!(win10/11 利用miracast进行无线投屏o
    前一段时间用电脑时,觉得电脑屏幕太小了,同时使用两个软件时切来切去很麻烦,且半屏显示字体太小了。想购置一台显示器,突然想起自己还有个小电脑(本科时用的电脑,因配置不高读研时将其闲置了),于是研究了怎样使用那台小新作为拓展屏幕。总结了一下过程如下:前提:需要两台win10/11电脑,并......
  • Leetcode 18. 四数之和
    1.题目基本信息1.1.题目描述给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a],nums[b],nums[c],nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d<na、b、c和d互不相同nu......