Portál AbcLinuxu, 11. května 2025 10:08

Dotaz: Neoprávněný přístup do paměti (SIGSEGV)

7.1.2011 12:46 Menethor
Neoprávněný přístup do paměti (SIGSEGV)
Přečteno: 2092×
Odpovědět | Admin
Přílohy:

Mám takový problém. Musím napsat semestrálku, aby fungovala v Linuxu. Tak jsem si nainstaloval Ubuntu 10.10 a jsem v něm tedy lama, páč jsem jej používal maximálně na chvilku ve škole.

Mám problém s fungováním vlastního programu v C. Je to program, který učitel předváděl ve škole a fungoval. Tam jedou Debianu, verzi neznám. Doma mi ale při připojení Klienta nahlásí:
Neoprávněný přístup do paměti (SIGSEGV)
a skončí. Zdrojáky serveru i klienta jsem přiložil. Zkoušel jsem to projet i valgrinem:

Server ceka na spojeni...
Pripojen klient 127.0.0.1
Server ceka na spojeni...
Klient poslal = �
Server odesila = �
==20534==
==20534== HEAP SUMMARY:
==20534==     in use at exit: 0 bytes in 0 blocks
==20534==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==20534==
==20534== All heap blocks were freed -- no leaks are possible
==20534==
==20534== For counts of detected and suppressed errors, rerun with: -v
==20534== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)

Tedy v paměti to není. Jde o velice triviální prográmek, který jen navazuje spojení a pošle jeden znak. Chci na tom udělat tu semestrálku, ale potřebuji, aby se mi data posílali.

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Oskar avatar 7.1.2011 13:28 Oskar | skóre: 18
Rozbalit Rozbalit vše Re: Neoprávněný přístup do paměti (SIGSEGV)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Works for me :)

Zkus to přeložit s parametry -ggdb pustit v gdb a až to spadne, vypsat backtrace, resp. zjistit, na kterém místě to sletí.
7.1.2011 14:03 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Neoprávněný přístup do paměti (SIGSEGV)
Odpovědět | | Sbalit | Link | Blokovat | Admin

Narazil jsem tam na pár problémů, které by ale segfault způsobit neměly:

Větší problém vidím v tom, že skoro nikde nekontrolujete návratové hodnoty funkcí. Přinejmenším u syscallu accept() byste to ale udělat měl, protože může být přerušen signálem a pak vrací -1.

Bez informace, kde přesně k tomu problému dochází (viz první odpověď) se ale dál nepohneme.

7.1.2011 14:56 Menethor
Rozbalit Rozbalit vše Re: Neoprávněný přístup do paměti (SIGSEGV)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Super, děkuji, už to funguje.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.