Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błąd pamięci - co znaczy log

Ostatnio zmodyfikowano 2014-01-18 16:43
Autor Wiadomość
roserek
Temat założony przez niniejszego użytkownika
Błąd pamięci - co znaczy log
» 2014-01-17 14:53:18
Co jakiś czas wywala mi program wyświetlając taki log. Zapewne chodzi o pamięć. Ale ie potrafię nic sensownego odczytać z tego , jeśli się da jakąś informacje wyciągnąć to proszę o jakieś wskazówki. Z góry dziękuję za pomoc ;)


*** glibc detected *** ./deamon: free(): invalid pointer: 0x000000000127aae8 ***
======= Backtrace: =========
/lib/libc.so.6(+0x71e16)[0x7fdb352a1e16]
/lib/libc.so.6(cfree+0x6c)[0x7fdb352a6b8c]
/usr/lib/libstdc++.so.6(_ZNSsD1Ev+0x39)[0x7fdb34d42ee9]
./deamon(_Z9onMessageP11AMQPMessage+0xec)[0x42192e]
./deamon(_ZN9AMQPQueue18sendConsumeCommandEv+0xba9)[0x4354cb]
./deamon(_ZN9AMQPQueue7ConsumeEs+0x2a)[0x4348e2]
./deamon(_Z3addPv+0x1d2)[0x421d01]
/lib/libpthread.so.0(+0x68ca)[0x7fdb357ae8ca]
/lib/libc.so.6(clone+0x6d)[0x7fdb352ffb6d]
======= Memory map: ========
00400000-00443000 r-xp 00000000 b6:ea6e1 386333                          /root/deamon/deamon
00642000-00644000 rw-p 00042000 b6:ea6e1 386333                          /root/deamon/deamon
01026000-0224f000 rw-p 00000000 00:00 0                                  [heap]
7fdb24000000-7fdb24021000 rw-p 00000000 00:00 0
7fdb24021000-7fdb28000000 ---p 00000000 00:00 0
7fdb2ac90000-7fdb2ac91000 ---p 00000000 00:00 0
7fdb2ac91000-7fdb2b491000 rw-p 00000000 00:00 0
7fdb2b491000-7fdb2b492000 ---p 00000000 00:00 0
7fdb2b492000-7fdb2bc92000 rw-p 00000000 00:00 0
7fdb2bc92000-7fdb2bc9e000 r-xp 00000000 b6:ea6e1 435                     /lib/libnss_files-2.11.3.so
7fdb2bc9e000-7fdb2be9d000 ---p 0000c000 b6:ea6e1 435                     /lib/libnss_files-2.11.3.so
7fdb2be9d000-7fdb2be9e000 r--p 0000b000 b6:ea6e1 435                     /lib/libnss_files-2.11.3.so
7fdb2be9e000-7fdb2be9f000 rw-p 0000c000 b6:ea6e1 435                     /lib/libnss_files-2.11.3.so
7fdb2be9f000-7fdb2bea5000 r-xp 00000000 b6:ea6e1 32014                   /usr/lib/libogg.so.0.7.0
7fdb2bea5000-7fdb2c0a4000 ---p 00006000 b6:ea6e1 32014                   /usr/lib/libogg.so.0.7.0
7fdb2c0a4000-7fdb2c0a5000 rw-p 00005000 b6:ea6e1 32014                   /usr/lib/libogg.so.0.7.0
7fdb2c0a5000-7fdb2c0fb000 r-xp 00000000 b6:ea6e1 31994                   /usr/lib/liborc-0.4.so.0.0.0
7fdb2c0fb000-7fdb2c2fa000 ---p 00056000 b6:ea6e1 31994                   /usr/lib/liborc-0.4.so.0.0.0
7fdb2c2fa000-7fdb2c2ff000 rw-p 00055000 b6:ea6e1 31994                   /usr/lib/liborc-0.4.so.0.0.0
7fdb2c2ff000-7fdb2c304000 r-xp 00000000 b6:ea6e1 29487                   /usr/lib/libXdmcp.so.6.0.0
7fdb2c304000-7fdb2c503000 ---p 00005000 b6:ea6e1 29487                   /usr/lib/libXdmcp.so.6.0.0
7fdb2c503000-7fdb2c504000 rw-p 00004000 b6:ea6e1 29487                   /usr/lib/libXdmcp.so.6.0.0
7fdb2c504000-7fdb2c506000 r-xp 00000000 b6:ea6e1 29458                   /usr/lib/libXau.so.6.0.0
7fdb2c506000-7fdb2c706000 ---p 00002000 b6:ea6e1 29458                   /usr/lib/libXau.so.6.0.0
7fdb2c706000-7fdb2c707000 rw-p 00002000 b6:ea6e1 29458                   /usr/lib/libXau.so.6.0.0
7fdb2c707000-7fdb2c732000 r-xp 00000000 b6:ea6e1 32030                   /usr/lib/libvorbis.so.0.4.4
7fdb2c732000-7fdb2c932000 ---p 0002b000 b6:ea6e1 32030                   /usr/lib/libvorbis.so.0.4.4
7fdb2c932000-7fdb2c933000 rw-p 0002b000 b6:ea6e1 32030                   /usr/lib/libvorbis.so.0.4.4
7fdb2c933000-7fdb2cbe6000 r-xp 00000000 b6:ea6e1 32037                   /usr/lib/libvorbisenc.so.2.0.7
7fdb2cbe6000-7fdb2cde5000 ---p 002b3000 b6:ea6e1 32037                   /usr/lib/libvorbisenc.so.2.0.7
7fdb2cde5000-7fdb2ce01000 rw-p 002b2000 b6:ea6e1 32037                   /usr/lib/libvorbisenc.so.2.0.7
7fdb2ce01000-7fdb2ce4d000 r-xp 00000000 b6:ea6e1 32021                   /usr/lib/libtheora.so.0.3.10
7fdb2ce4d000-7fdb2d04d000 ---p 0004c000 b6:ea6e1 32021                   /usr/lib/libtheora.so.0.3.10
7fdb2d04d000-7fdb2d04e000 rw-p 0004c000 b6:ea6e1 32021                   /usr/lib/libtheora.so.0.3.10
7fdb2d04e000-7fdb2d066000 r-xp 00000000 b6:ea6e1 32008                   /usr/lib/libspeex.so.1.5.0
7fdb2d066000-7fdb2d266000 ---p 00018000 b6:ea6e1 32008                   /usr/lib/libspeex.so.1.5.0
7fdb2d266000-7fdb2d267000 rw-p 00018000 b6:ea6e1 32008                   /usr/lib/libspeex.so.1.5.0
7fdb2d267000-7fdb2d30d000 r-xp 00000000 b6:ea6e1 32002                   /usr/lib/libschroedinger-1.0.so.0.3.0
7fdb2d30d000-7fdb2d50d000 ---p 000a6000 b6:ea6e1 32002                   /usr/lib/libschroedinger-1.0.so.0.3.0
7fdb2d50d000-7fdb2d510000 rw-p 000a6000 b6:ea6e1 32002                   /usr/lib/libschroedinger-1.0.so.0.3.0
7fdb2d510000-7fdb2d511000 rw-p 00000000 00:00 0
7fdb2d511000-7fdb2d530000 r-xp 00000000 b6:ea6e1 31988                   /usr/lib/libopenjpeg-2.1.3.0.so
7fdb2d530000-7fdb2d72f000 ---p 0001f000 b6:ea6e1 31988                   /usr/lib/libopenjpeg-2.1.3.0.so
7fdb2d72f000-7fdb2d731000 rw-p 0001e000 b6:ea6e1 31988                   /usr/lib/libopenjpeg-2.1.3.0.so
7fdb2d731000-7fdb2d73d000 r-xp 00000000 b6:ea6e1 31982                   /usr/lib/libgsm.so.1.0.12
7fdb2d73d000-7fdb2d93d000 ---p 0000c000 b6:ea6e1 31982                   /usr/lib/libgsm.so.1.0.12
7fdb2d93d000-7fdb2d93e000 rw-p 0000c000 b6:ea6e1 31982                   /usr/lib/libgsm.so.1.0.12
7fdb2d93e000-7fdb2d97d000 r-xp 00000000 b6:ea6e1 31976                   /usr/lib/libfaad.so.2.0.0
7fdb2d97d000-7fdb2db7c000 ---p 0003f000 b6:ea6e1 31976                   /usr/lib/libfaad.so.2.0.0
7fdb2db7c000-7fdb2db7f000 rw-p 0003e000 b6:ea6e1 31976                   /usr/lib/libfaad.so.2.0.0
7fdb2db7f000-7fdb2dc12000 r-xp 00000000 b6:ea6e1 31970                   /usr/lib/libdirac_encoder.so.0.1.0
7fdb2dc12000-7fdb2de11000 ---p 00093000 b6:ea6e1 31970                   /usr/lib/libdirac_encoder.so.0.1.0
7fdb2de11000-7fdb2de16000 rw-p 00092000 b6:ea6e1 31970                   /usr/lib/libdirac_encoder.so.0.1.0
7fdb2de16000-7fdb2de17000 rw-p 00000000 00:00 0
7fdb2de17000-7fdb2de3d000 r-xp 00000000 b6:ea6e1 3420                    /usr/lib/libexpat.so.1.5.2
7fdb2de3d000-7fdb2e03d000 ---p 00026000 b6:ea6e1 3420                    /usr/lib/libexpat.so.1.5.2
7fdb2e03d000-7fdb2e03f000 rw-p 00026000 b6:ea6e1 3420                    /usr/lib/libexpat.so.1.5.2
7fdb2e03f000-7fdb2e05b000 r-xp 00000000 b6:ea6e1 276                     /lib/libselinux.so.1
7fdb2e05b000-7fdb2e25a000 ---p 0001c000 b6:ea6e1 276                     /lib/libselinux.so.1
7fdb2e25a000-7fdb2e25b000 r--p 0001b000 b6:ea6e1 276                     /lib/libselinux.so.1
7fdb2e25b000-7fdb2e25c000 rw-p 0001c000 b6:ea6e1 276                     /lib/libselinux.so.1
7fdb2e25c000-7fdb2e25d000 rw-p 00000000 00:00 0
7fdb2e25d000-7fdb2e270000 r-xp 00000000 b6:ea6e1 427                     /lib/libresolv-2.11.3.so
7fdb2e270000-7fdb2e46f000 ---p 00013000 b6:ea6e1 427                     /lib/libresolv-2.11.3.so
7fdb2e46f000-7fdb2e470000 r--p 00012000 b6:ea6e1 427                     /lib/libresolv-2.11.3.so
7fdb2e470000-7fdb2e471000 rw-p 00013000 b6:ea6e1 427                     /lib/libresolv-2.11.3.so
7fdb2e471000-7fdb2e473000 rw-p 00000000 00:00 0
7fdb2e473000-7fdb2e4a3000 r-xp 00000000 b6:ea6e1 453                     /lib/libpcre.so.3.12.1Aborted
P-102363
pekfos
» 2014-01-17 15:10:53
free(): invalid pointer: 0x000000000127aae8
P-102365
roserek
Temat założony przez niniejszego użytkownika
» 2014-01-17 15:29:03
Są jakieś konkretne przypadki kiedy tki błąd wyskakuje ? Nieważny wskaźnik wg mnie oznacza że odwółuję się do jakiegoś adresu w pamięci którego niema czy jest nieważny. Ale dlaczego dany kod działa dla 1000 iteracji i np w 1001 się wysypuje. ?? Ciężko jest znaleźć mi przyczynę
P-102370
pekfos
» 2014-01-17 19:48:33
Problem leży w kodzie, którego nie podałeś.
P-102398
roserek
Temat założony przez niniejszego użytkownika
» 2014-01-18 11:26:47
Domyślam się że problem leży gdzieś w bibliotece rabbitmq. Generalnie program działa na dwóch wątkach. Jeden jest odpowiedzialny za indeksowanie a drugi za wczytywanie. Do tego pierwszego jest właśnie podpięty rabbit. I przechodzi przez około 100 iteracji i wyskakuje ten błąd. Poniżej zamieszczę kod, może coś mi doradzicie.

C/C++
int onMessage( AMQPMessage * message ) {
   
    cout << "dziala1" << endl;
    uint32_t j = 0;
    cout << "dziala2" << endl;
    stringstream ss;
    cout << "dziala3" << endl;
    int arg;
    cout << "dziala4" << endl;
    string order;
    cout << "dziala5" << endl;
   
    cout << "przed wskaznikiem" << endl;
    char * data = message->getMessage( & j );
    cout << " po wskazniku " << endl;
   
    ss.str( "" );
    if( data ) {
        ss << data;
        ss >> arg;
        ss >> order;
        cout << order << endl;
        panel.perform( arg, order );
    }
   
    return 0;
};


void * search( void * empty ) {
   
    int arg;
    string order, message;
   
    serwer host;
   
    while( 1 ) {
        host.take_data( arg, order );
       
        message = panel.perform( arg, order );
       
        host.answer( message );
    }
   
}


void * add( void * empty ) {
   
    try {
        AMQP amqp;
        AMQPQueue * qu2 = amqp.createQueue( "q2" );
        qu2->Declare();
       
        qu2->Bind( "e", "" );
       
        qu2->addEvent( AMQP_MESSAGE, onMessage );
       
        qu2->Consume( AMQP_NOACK );
       
    } catch( AMQPException e ) {
        std::cout << e.getMessage() << std::endl;
    }
}


int main( int argc, char * argv[] )
{
   
    int wynik;
    pthread_t thread_1, thread_2;
   
    pthread_create( & thread_1, NULL, & search,( void * ) & panel );
    pthread_create( & thread_2, NULL, & add,( void * ) & panel );
   
    pthread_join( thread_1,( void ** ) wynik );
   
    return 0;
}


Jak widać w kodzie chciałem sprawdzić dokładnie w którym miejscu pada program w sposób chyba najprostszy przez wypisywanie w każdym wierszu znaków. Dodam jeszcze log z programu:


dziala1
dziala2
dziala3
dziala4
dziala5
przed wskaznikiem
 po wskazniku
/home/pawel/temp/Julia1390033273;0;0;;q
910
Osoba zstala dodana poprawnie.
Baza poprawnie zaladowana
dziala1
dziala2
dziala3
dziala4
dziala5
przed wskaznikiem
 po wskazniku
/home/pawel/temp/Kasia1390033275;0;0;;q
911
Osoba zstala dodana poprawnie.
911
dodano zdjecie
Baza poprawnie zaladowana
*** glibc detected *** ./deamon: free(): invalid pointer: 0x0000000001abe658 ***
======= Backtrace: =========
P-102421
pekfos
» 2014-01-18 11:40:20
C/C++
panel.perform( arg, order );
Podaj kod tej metody / daj link do dokumentacji.
P-102424
roserek
Temat założony przez niniejszego użytkownika
» 2014-01-18 12:15:46
metoda perform jest napisana przeze mnie i nic szczególnego w niej nie ma:

C/C++
string control::perform( int arg, string order )
{
   
    switch( arg ) {
    case 1:
        save_image( order );
        break;
    case 2:
        return search_person( order );
        break;
    case 3:
        save_more( order );
        break;
    case 4:
        save_new_person( order );
        break;
        default:
        return "Bledny argument";
        break;
    }
}

Natomiast dokumentacja rabbita jest cała tutaj:
http://www.rabbitmq.com/devtools.html

Natomiast ja kożystam z tej konkretnej biblioteki:
https://github.com/akalend/amqpcpp
P-102428
Monika90
» 2014-01-18 12:17:09
Brakuje w niej return (w tej funkcji perform oczywiście)
P-102429
« 1 » 2
  Strona 1 z 2 Następna strona