Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;执行列表时出现分段错误。push_back(),在主机上更正,在arm上出错 程序接收信号SIGSEGV,分段故障。 0x400741e0位于std::_列表\节点\基础::钩子(std:_列表\节点\基础*)() 来自/mnt/yaffs2/Cdatabox/lib/libstdc++.so.6 (gdb)英国电信 #0 0x400741e0位于std::_列表\节点\基础::钩子(std:_列表\节点\基础*)() 来自/mnt/yaffs2/Cdatabox/lib/libstdc++.so.6 #1标准::列表中的0x00012df8:_M_插入(此=0xbe9d1af0,_位置=…,_x=…) at/opt/arm-2008q3-linux/bin/./lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../../../arm-none-linux-gnueabi/include/c++/4.3.2/bits/stl_-list.h:1342 #std::list::push_back中的2 0x00012e30(此=0xbe9d1af0,_x=…) at/opt/arm-2008q3-linux/bin/./lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../../../arm-none-linux-gnueabi/include/c++/4.3.2/bits/stl_list.h:876 #Cbox中的3 0x0000d508::稳定分析::uu dealstable(此=0xbe9d1a98) 在../include/class/steadyananalysis.h:237 #Cbox::SteadyAnalysis::input中的4 0x0000dc7c(此=0xbe9d1a98, 重量=1467031,原始时间=1552067705) 在../include/class/steadyananalysis.h:110 #SteadyanAnalysis处的5 0x0000deb4主管道(argc=2,argv=0xbe9d1d74)。cc:30 (gdb)拆卸 函数_ZNSt15_List_node_base4hookEPS_的汇编程序代码转储: 0x400741d0:ldr r3[r1,#4] 0x400741d4:stm r0,{r1,r3} 0x400741d8:ldr r2[r1,#4] 0x400741dc:str r0[r1,#4] =>0x400741e0:str r0[r2] 0x400741e4:bx lr 汇编程序转储结束。 (gdb)i r r0 0x31220 201248 r1 0xbe9d1af0 3197967088 r2 0x46 70 r3 0x46 70 r4 0xbe9d1a98 3197967000 r5 0x40dd4c00 1088244736 r6 0x4136629f 1094083231 r7 0x1e400000 507510784 r8 0x41d720ab 1104617643 r9 0x0 0 r10 0x31d20 204064 r11 0xbe9d1944 3197966660 r12 0x30a58 199256 sp 0xbe9d1928 0xbe9d1928 lr 0x12df8 77304 pc 0x400741e0 0x400741e0 cpsr 0x6000001610612752 (gdb)_C++_Segmentation Fault_Arm_Cross Platform - Fatal编程技术网

c++;执行列表时出现分段错误。push_back(),在主机上更正,在arm上出错 程序接收信号SIGSEGV,分段故障。 0x400741e0位于std::_列表\节点\基础::钩子(std:_列表\节点\基础*)() 来自/mnt/yaffs2/Cdatabox/lib/libstdc++.so.6 (gdb)英国电信 #0 0x400741e0位于std::_列表\节点\基础::钩子(std:_列表\节点\基础*)() 来自/mnt/yaffs2/Cdatabox/lib/libstdc++.so.6 #1标准::列表中的0x00012df8:_M_插入(此=0xbe9d1af0,_位置=…,_x=…) at/opt/arm-2008q3-linux/bin/./lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../../../arm-none-linux-gnueabi/include/c++/4.3.2/bits/stl_-list.h:1342 #std::list::push_back中的2 0x00012e30(此=0xbe9d1af0,_x=…) at/opt/arm-2008q3-linux/bin/./lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../../../arm-none-linux-gnueabi/include/c++/4.3.2/bits/stl_list.h:876 #Cbox中的3 0x0000d508::稳定分析::uu dealstable(此=0xbe9d1a98) 在../include/class/steadyananalysis.h:237 #Cbox::SteadyAnalysis::input中的4 0x0000dc7c(此=0xbe9d1a98, 重量=1467031,原始时间=1552067705) 在../include/class/steadyananalysis.h:110 #SteadyanAnalysis处的5 0x0000deb4主管道(argc=2,argv=0xbe9d1d74)。cc:30 (gdb)拆卸 函数_ZNSt15_List_node_base4hookEPS_的汇编程序代码转储: 0x400741d0:ldr r3[r1,#4] 0x400741d4:stm r0,{r1,r3} 0x400741d8:ldr r2[r1,#4] 0x400741dc:str r0[r1,#4] =>0x400741e0:str r0[r2] 0x400741e4:bx lr 汇编程序转储结束。 (gdb)i r r0 0x31220 201248 r1 0xbe9d1af0 3197967088 r2 0x46 70 r3 0x46 70 r4 0xbe9d1a98 3197967000 r5 0x40dd4c00 1088244736 r6 0x4136629f 1094083231 r7 0x1e400000 507510784 r8 0x41d720ab 1104617643 r9 0x0 0 r10 0x31d20 204064 r11 0xbe9d1944 3197966660 r12 0x30a58 199256 sp 0xbe9d1928 0xbe9d1928 lr 0x12df8 77304 pc 0x400741e0 0x400741e0 cpsr 0x6000001610612752 (gdb)

c++;执行列表时出现分段错误。push_back(),在主机上更正,在arm上出错 程序接收信号SIGSEGV,分段故障。 0x400741e0位于std::_列表\节点\基础::钩子(std:_列表\节点\基础*)() 来自/mnt/yaffs2/Cdatabox/lib/libstdc++.so.6 (gdb)英国电信 #0 0x400741e0位于std::_列表\节点\基础::钩子(std:_列表\节点\基础*)() 来自/mnt/yaffs2/Cdatabox/lib/libstdc++.so.6 #1标准::列表中的0x00012df8:_M_插入(此=0xbe9d1af0,_位置=…,_x=…) at/opt/arm-2008q3-linux/bin/./lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../../../arm-none-linux-gnueabi/include/c++/4.3.2/bits/stl_-list.h:1342 #std::list::push_back中的2 0x00012e30(此=0xbe9d1af0,_x=…) at/opt/arm-2008q3-linux/bin/./lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../../../arm-none-linux-gnueabi/include/c++/4.3.2/bits/stl_list.h:876 #Cbox中的3 0x0000d508::稳定分析::uu dealstable(此=0xbe9d1a98) 在../include/class/steadyananalysis.h:237 #Cbox::SteadyAnalysis::input中的4 0x0000dc7c(此=0xbe9d1a98, 重量=1467031,原始时间=1552067705) 在../include/class/steadyananalysis.h:110 #SteadyanAnalysis处的5 0x0000deb4主管道(argc=2,argv=0xbe9d1d74)。cc:30 (gdb)拆卸 函数_ZNSt15_List_node_base4hookEPS_的汇编程序代码转储: 0x400741d0:ldr r3[r1,#4] 0x400741d4:stm r0,{r1,r3} 0x400741d8:ldr r2[r1,#4] 0x400741dc:str r0[r1,#4] =>0x400741e0:str r0[r2] 0x400741e4:bx lr 汇编程序转储结束。 (gdb)i r r0 0x31220 201248 r1 0xbe9d1af0 3197967088 r2 0x46 70 r3 0x46 70 r4 0xbe9d1a98 3197967000 r5 0x40dd4c00 1088244736 r6 0x4136629f 1094083231 r7 0x1e400000 507510784 r8 0x41d720ab 1104617643 r9 0x0 0 r10 0x31d20 204064 r11 0xbe9d1944 3197966660 r12 0x30a58 199256 sp 0xbe9d1928 0xbe9d1928 lr 0x12df8 77304 pc 0x400741e0 0x400741e0 cpsr 0x6000001610612752 (gdb),c++,segmentation-fault,arm,cross-platform,C++,Segmentation Fault,Arm,Cross Platform,代码: //类型声明 结构SteadyNode{ 双均值; int持续时间; 内斯达林; 开始检测的时间; 时间\u t结束检测到的原始时间; }; //定义信息 //列表::迭代器upIt,downIt; //列表稳定节点列表; //列出睡眠列表; { steadyNodeList.back().endDetectedRawTime=currentRawTime; SteadyNode last=steadyNodeList.back(); 如果(onBedFlag==1) { downIt

代码:

//类型声明
结构SteadyNode{
双均值;
int持续时间;
内斯达林;
开始检测的时间;
时间\u t结束检测到的原始时间;
}; 
//定义信息
//列表::迭代器upIt,downIt;
//列表稳定节点列表;
//列出睡眠列表;
{
steadyNodeList.back().endDetectedRawTime=currentRawTime;
SteadyNode last=steadyNodeList.back();
如果(onBedFlag==1)
{
downIt=steadyNodeList.end();
名单上的名单;
拼接(onBedMeanList.begin()、steadyNodeList、upIt、downIt);
steadyNodeList.clear();
steadyNodeList.向后推(最后一个);
sleepPiceList.向后推(onBedMeanList);//已解决

这些gdb打印信息不是主要问题

对于gcc4.4和gcc4.3,当您编写类似于
list
的代码时,STL list不会预分配元素,但在gcc6.3中会预分配元素。这就是为什么相同的代码在gcc6.3中可以运行良好,但在gcc4.3中会出现段错误


我猜一些低级实现在不同的gcc版本之间是不同的。如果有人知道详细原因,请给出答案,谢谢。

请提供一个例子,说明您最有可能做了导致未定义行为的事情。当您构建时,是否收到任何警告消息?是否启用了详细的警告消息(如
-Wall-Wextra-Wpedantic
)?您是否正在进行任何C样式转换以消除警告(甚至错误)?
Cbox::SteadyNode
可能存在分配问题。Valgrind不会捕获可移植性错误,例如主机上使用64位整数时出现32位溢出;这不是您的问题,但您希望将其视为许多可能性之一。人们只能猜测您的问题,但没有明确的答案,并将我们限制在其他未来的读者中。可以吗请提供有关cbox命名空间/类的更多信息,尤其是分配代码。使用编译选项-Wall。无任何警告添加一些代码段,“//
    Program received signal SIGSEGV, Segmentation fault.
0x400741e0 in std::_List_node_base::hook(std::_List_node_base*) ()
   from /mnt/yaffs2/Cdatabox/lib/libstdc++.so.6
(gdb) bt
#0  0x400741e0 in std::_List_node_base::hook(std::_List_node_base*) ()
   from /mnt/yaffs2/Cdatabox/lib/libstdc++.so.6
#1  0x00012df8 in std::list<std::list<Cbox::SteadyNode, std::allocator<Cbox::SteadyNode> >, std::allocator<std::list<Cbox::SteadyNode, std::allocator<Cbox::SteadyNode> > > >::_M_insert (this=0xbe9d1af0, __position=..., __x=...)
    at /opt/arm-2008q3-linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/include/c++/4.3.2/bits/stl_list.h:1342
#2  0x00012e30 in std::list<std::list<Cbox::SteadyNode, std::allocator<Cbox::SteadyNode> >, std::allocator<std::list<Cbox::SteadyNode, std::allocator<Cbox::SteadyNode> > > >::push_back (this=0xbe9d1af0, __x=...)
    at /opt/arm-2008q3-linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/include/c++/4.3.2/bits/stl_list.h:876
#3  0x0000d508 in Cbox::SteadyAnalysis::__dealSteady (this=0xbe9d1a98)
    at ../include/class/SteadyAnalysis.h:237
#4  0x0000dc7c in Cbox::SteadyAnalysis::input (this=0xbe9d1a98,
    weight=1467031, rawTime=1552067705)
    at ../include/class/SteadyAnalysis.h:110
#5  0x0000deb4 in main (argc=2, argv=0xbe9d1d74) at SteadyAnalysis.cc:30
(gdb) disassemble
Dump of assembler code for function _ZNSt15_List_node_base4hookEPS_:
   0x400741d0 <+0>:     ldr     r3, [r1, #4]
   0x400741d4 <+4>:     stm     r0, {r1, r3}
   0x400741d8 <+8>:     ldr     r2, [r1, #4]
   0x400741dc <+12>:    str     r0, [r1, #4]
=> 0x400741e0 <+16>:    str     r0, [r2]
   0x400741e4 <+20>:    bx      lr
End of assembler dump.
(gdb) i r
r0             0x31220  201248
r1             0xbe9d1af0       3197967088
r2             0x46     70
r3             0x46     70
r4             0xbe9d1a98       3197967000
r5             0x40dd4c00       1088244736
r6             0x4136629f       1094083231
r7             0x1e400000       507510784
r8             0x41d720ab       1104617643
r9             0x0      0
r10            0x31d20  204064
r11            0xbe9d1944       3197966660
r12            0x30a58  199256
sp             0xbe9d1928       0xbe9d1928
lr             0x12df8  77304
pc             0x400741e0       0x400741e0 <std::_List_node_base::hook(std::_List_node_base*)+16>
cpsr           0x60000010       1610612752
(gdb)
 //Type declaration
    struct SteadyNode { 
        double mean; 
        int duration; 
        int startLine; 
        time_t startDetectedRawTime; 
        time_t endDetectedRawTime; 
    }; 

//Definition info
//list<SteadyNode>::iterator upIt, downIt;
//list<SteadyNode> steadyNodeList;
//list<list<SteadyNode> > sleepPiceList;

{
    steadyNodeList.back().endDetectedRawTime = currentRawTime;
    SteadyNode last = steadyNodeList.back();
    if (onBedFlag == 1)
    {
        downIt = steadyNodeList.end();
        list<SteadyNode> onBedMeanList;
        onBedMeanList.splice(onBedMeanList.begin(), steadyNodeList, upIt, downIt);
        steadyNodeList.clear();
        steadyNodeList.push_back(last);

        sleepPiceList.push_back(onBedMeanList); //<=== crash position
        onBedMeanList.clear();
        onBedFlag = -1;
    }
    else
    {
        steadyNodeList.clear();
        steadyNodeList.push_back(last);
    }
}