[C++] Glibc free błąd przy getline

0

Napisałem program do OI, który rozwiązuje jedno z zadań. Niestety dla niektórych testów, bez żadnej sensownej (dla mnie) przyczyny wysypuje się podczas wczytywania danych. Kodu nie podam publicznie z wiadomych powodów. Poniżej cała treść błędu jaka mi się pojawia. Czy jest to możliwe, ze jest to błąd biblioteki w moim distro (Arch) i przy testach OI wszytko będzie działało prawidłowo?

Dla uzupełnienia warto dodać, że test na którym program się wysypuje nie należy do największych. Ten najobszerniejszy przechodzi bez zadyszki nawet...

*** glibc detected *** ./a.out: free(): invalid size: 0x090062c8 ***
======= Backtrace: =========
[0x80c67ad]
[0x80c93a8]
[0x80ca569]
[0x8099459]
[0x809940d]
[0x80488f8]
[0x80acf04]
[0x8048151]
======= Memory map: ========
08048000-08145000 r-xp 00000000 08:14 17070      /home/albi/Projekty/OI/SLO/a.out
08145000-08147000 rwxp 000fd000 08:14 17070      /home/albi/Projekty/OI/SLO/a.out
08147000-0814e000 rwxp 08147000 00:00 0 
08fe7000-0902b000 rwxp 08fe7000 00:00 0          [heap]
b7e00000-b7e23000 rwxp b7e00000 00:00 0 
b7e23000-b7f00000 ---p b7e23000 00:00 0 
b7f12000-b7f13000 r-xp b7f12000 00:00 0          [vdso]
bfbfe000-bfc13000 rw-p bffeb000 00:00 0          [stack]
Przerwane

Linijka w której pojawia się problem:
getline(cin, buffer);

Przy czym zmienna buffer to po prostu string, z którego wielokrotnie korzystam do wczytywania danych w parze z stringstream.

0

problem maly, ale moze linia wejsciowa dluzsza niz ustawa przewiduje? a moze ten konkretny obiekt string 'buffer' jest uszkodzony przez nadpisanie stosu/whatever ? sposobow na uzyskanie podobnego bledu jest wiele.. ale patrzac na konkretne free, raz czy dwa sie spotkalem z podobnym bledem w glibc.. ale to bylo daawnoo (i nieprawda:) )

a tak na serio, glibc mowi - free/invalid block size - co znaczy ze albo rzeczywiscie cos Ci tego stringa nadpisalo smieciami i wewnetrzne wskazniki sa zniszczone, albo -- ze ktos/cos jego wewnerzne bufory zwolnilo. czemu? nie wiem. moze odebrales jego bufor poprzez cstr i zwolniles przypadkiem?

0

Problem załatwiony, okazuje się że przy ustawionym

ios_base::sync_with_stdio(0);

STL który znajduje się pod Arch'em (a przynajmniej ta część której używam) zachowuje się co najmniej dziwnie. Krótko mówiąc, zabugowana biblioteka i coś nie teges ;).

1 użytkowników online, w tym zalogowanych: 0, gości: 1