Skocz do zawartości

Problem Z C++ Z New...


FC4B

Rekomendowane odpowiedzi

Pisze sobie program który pobiera dane z pliku potem coś tam oblicza, do pewnego momentu bylo wszystko ok, nagle zaczęły mi się dziać dziwne rzeczy z funkcją którą mialem chyba od początku:

 

int *pt;
pt = new int[(*liczba)+1];

 

Niby standardowa instrukcja przez nią mam coś takiego:

 


*** glibc detected *** ./geo1: malloc(): memory corruption: 0x00000000016e0220 ***
======= Backtrace: =========
/lib64/libc.so.6[0x31fb27b5df]
/lib64/libc.so.6(__libc_malloc+0x98)[0x31fb27ce18]
/usr/lib64/libstdc++.so.6(_Znwm+0x1d)[0x32026c41bd]
/usr/lib64/libstdc++.so.6(_Znam+0x9)[0x32026c42f9]
./geo1(__gxx_personality_v0+0x48c)[0x401984]
./geo1[0x4021e1]
./geo1[0x40386d]
/lib64/libc.so.6(__libc_start_main+0xfa)[0x31fb21e32a]
./geo1(__gxx_personality_v0+0xa1)[0x401599]
======= Memory map: ========
00400000-00405000 r-xp 00000000 08:06 1933315                            /home/ja/program/geo1
00604000-00605000 rw-p 00004000 08:06 1933315                            /home/ja/program/geo1
016dd000-016fe000 rw-p 016dd000 00:00 0                                  [heap]
31fae00000-31fae1d000 r-xp 00000000 08:09 966682                         /lib64/ld-2.8.so
31fb01c000-31fb01d000 r--p 0001c000 08:09 966682                         /lib64/ld-2.8.so
31fb01d000-31fb01e000 rw-p 0001d000 08:09 966682                         /lib64/ld-2.8.so
31fb200000-31fb362000 r-xp 00000000 08:09 966684                         /lib64/libc-2.8.so
31fb362000-31fb562000 ---p 00162000 08:09 966684                         /lib64/libc-2.8.so
31fb562000-31fb566000 r--p 00162000 08:09 966684                         /lib64/libc-2.8.so
31fb566000-31fb567000 rw-p 00166000 08:09 966684                         /lib64/libc-2.8.so
31fb567000-31fb56c000 rw-p 31fb567000 00:00 0 
31fb600000-31fb684000 r-xp 00000000 08:09 966974                         /lib64/libm-2.8.so
31fb684000-31fb883000 ---p 00084000 08:09 966974                         /lib64/libm-2.8.so
31fb883000-31fb884000 r--p 00083000 08:09 966974                         /lib64/libm-2.8.so
31fb884000-31fb885000 rw-p 00084000 08:09 966974                         /lib64/libm-2.8.so
3200a00000-3200a16000 r-xp 00000000 08:09 967505                         /lib64/libgcc_s-4.3.0-20080428.so.1
3200a16000-3200c15000 ---p 00016000 08:09 967505                         /lib64/libgcc_s-4.3.0-20080428.so.1
3200c15000-3200c16000 rw-p 00015000 08:09 967505                         /lib64/libgcc_s-4.3.0-20080428.so.1
3202600000-32026ee000 r-xp 00000000 08:09 378831                         /usr/lib64/libstdc++.so.6.0.10
32026ee000-32028ee000 ---p 000ee000 08:09 378831                         /usr/lib64/libstdc++.so.6.0.10
32028ee000-32028f5000 r--p 000ee000 08:09 378831                         /usr/lib64/libstdc++.so.6.0.10
32028f5000-32028f7000 rw-p 000f5000 08:09 378831                         /usr/lib64/libstdc++.so.6.0.10
32028f7000-320290a000 rw-p 32028f7000 00:00 0 
7f2f1c000000-7f2f1c021000 rw-p 7f2f1c000000 00:00 0 
7f2f1c021000-7f2f20000000 ---p 7f2f1c021000 00:00 0 
7f2f20ad7000-7f2f20ada000 rw-p 7f2f20ad7000 00:00 0 
7f2f20b03000-7f2f20b07000 rw-p 7f2f20b03000 00:00 0 
7fff28ad0000-7fff28b06000 rw-p 7ffffffc9000 00:00 0                      [stack]
7fff28bfe000-7fff28bff000 r-xp 7fff28bfe000 00:00 0                      [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

Do pewnego czasu działało mi bez zastrzeżeń, ale potem coraz częsciej i coraz więcej przykładów zaczynało wywalac mi ten błąd.

 

Mam pytanie czy to wygląda na mój błąd w programie czy mogloto być spowodowane np updatem i problemem z kompilatorem?

pozdrawiam

 

EDIT: oczywiście ten problem pojawia się po uruchomieniu skompilowanego programu, sama kompilacja zachodzi bez zastrzeżen

Odnośnik do komentarza
Udostępnij na innych stronach

Program jest dosyć rozbudowany i ciężko mi cały wkleić, poza tym przy danych rzedu 22 zawsze zatrzymuje się na tym fragmencie, przy większych jak np 535 zachodzi dalej ale wywala mi błąd już na samym koncu po tym gdy podaje gotowy wynik (Troszkę źle opisłem w pierwszym poście bo nie sprawdziłem z innymi danymi). Chwilowo nie mam dostępu do drugiego komputera, będę musiał przetestować to jeszcze na 32bitowej maszynie.

Odnośnik do komentarza
Udostępnij na innych stronach

Całą noc przeglądałem kod i znalazłem błąd w funkcji którą użyłem prawie na samym początku (dodałem do niej 1) co ciekawe w ogole nie odnosi się do tego miejsca przerwania ale do "memcpy", zazwyczaj w takich przypadkach widziałem "naruszenie ochrony pamięci":P dzięki chłopaki za fatygę, pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...