Wyjątek "invalid pointer" na koniec działania programu

0

Cześć
Mam program w C++, który tworzy obiekt z biblioteki zewnętrznej, która wykonuje algorytm na naszym obiekcie.
Wszystko działa pięknie, tylko przy zamykaniu programu (przy return 0) leci na konsolę komunikat:

munmap_chunk(): invalid pointer
Aborted (core dumped)

a program kończy się kodem 143.
To jest błąd z tej biblioteki - gdzieś jest problem z czyszczeniem shared_ptr z boosta. Jak wywalę ten obiekt, to nie ma błędu.
Licencja nie pozwala mi zmodyfikować kodu biblioteki, można jakoś zrobić, aby nie było widać tego błędu?

6
  1. Co to za biblioteka
  2. Co mówi dokumentacja
  3. Jaki jest call stack crash-a
  4. Gdzie jest kod, w którym pojawia się crash?
  5. Czego oczekujesz, przy totalnym braku informacji. Jak na razie tutaj bardziej wróżka pomoże.
  6. W sumie google może za wróżkę robić: https://stackoverflow.com/a/32118638/1387438
0

Jest to biblioteka statycznie linkowana, nie można jej przerobić, nie mamy kodu
Problem jest, że na koniec programu jakiś obiekt z tej biblioteki czyści używany przez siebie wskaźnik i wywala coś takiego. Program działa poprawnie do czasu napotkania "return 0;"

Pytanie jest, czy da się zrobić jakoś w C++, aby zignorować ten błąd

0

Oczywiście, że się da:

void fun_which_use_lib(){
  //...
}
int main(){
  std::thread t{fun_which_use_lib};
  t.detach();
}

Czy to mądre? Raczej nie.
Lepiej poszukać biblioteki zastępczej.

1
Gd_Intel_47333 napisał(a):

Licencja nie pozwala mi zmodyfikować kodu biblioteki, można jakoś zrobić, aby nie było widać tego błędu?

Możesz przecież zgłosić twórcom danej biblioteki, że mają błąd. A być może i zaproponować własną poprawkę/pull requesta, jeśli takie przyjmują. Wtedy cała biblioteka zostanie naprawiona w trymiga i nie będziesz modyfikować jej na własną rękę.

Oczywiście może się zdarzyć, że twórca oleje twoje zgłoszenie, ale to wtedy masz sygnał, że jest to biblioteka, która nie ma dobrego wsparcia i warto poszukać biblioteki lepiej działającej i z lepszym wsparciem.

2

To jest C/C++
Jeśli zwolnienie bloku wysadza w powietrze, to nie wiadomo jak wcześniej jest pojechane po pamięci.
To zaledwie przejaw, i jego leczenie ma połowiczny (albo jeszcze mniejszy) sens

Jaki-taki zdrowy kod, nawet jeśli błędnie zwalnia, to nie da cora

2

Ja bym raczej podejrzewał, że nie doczytałeś dokumentacji (lub jest ona niekompletna), i biblioteka przejmuje własność danego obiektu, a ty go jej nie oddajesz.

1

OP napisał

Licencja nie pozwala mi zmodyfikować kodu biblioteki

A masz źródła ? Zazwyczaj najłatwiej się zwala na innych a najtrudniej zacząć szukanie od siebie.
Ewentualnie zgłoś błąd do autora niech naprawi, Niezgłoszonych błędów nikt nie naprawia

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