0

コアダンプがありますが、参照アドレスがNULLであることを示しています。

詳細:

(gdb) bt
#0  0xffffe410 in __kernel_vsyscall ()
#1  0x005b6c10 in raise () from /lib/libc.so.6
#2  0x005b8521 in abort () from /lib/libc.so.6
#3  0xf749e641 in Application::fatalSignal () at Application.cc:277
#4  <signal handler called>
#5  SdlProcess::procedureReturn (this=0x0, aSignal=0, aArg1=1, aArg2=0x0)
    at /include/c++/4.1.1/bits/stl_list.h:652
#6  0x08112edb in Sdl::authFailurer (aSdlProcess=@0x0, aLabel=0, aSignal=0, arg2=0x0) at /Mgr/SdlAuth.cc:1781
#7  0x00000000 in ?? ()
================
define:
Sdl::authFailurer(SdlProcess& aSdlProcess, int aLabel, int aSignal, int /*arg1*/, void* arg2)

#5 aSdlProcess.procedureReturn(0, 1, 0);

およびstl_list.h:652

 bool empty() const

      { return this->_M_impl._M_node._M_next == &this->_M_impl._M_node; }    ---->652
in procedureReturn()
{
   ...
  if (!mProcedureStack.empty())---->here,mProcedureStack is a datamember of SdlProcess
   ...
  {
  ...}
}
4

2 に答える 2

1

NULL ポインターを逆参照することで、NULL 参照を取得できます。参照でない限り、この特定のケースでそれがどのように発生するかはわかりませんmProcedureStack

于 2012-09-26T03:16:44.177 に答える
1

この問題の最も一般的な原因は、次のようなダングリング参照を返す場合です。

int& foo() {
   int bar = 5;
   return bar;
}

返された参照はfoo今のところスタックを指しており、未定義のデータが含まれています。

于 2012-09-26T03:16:55.703 に答える