bad_alloc przy konkatenacji stringow

bad_alloc przy konkatenacji stringow
JU
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad rok
  • Postów:8
0

Mam metode:

Kopiuj
  std::string get_file_name(int n, std::string name){
    return name + std::to_string(n);
  }

Kazdej jej wywolanie konczy sie

Kopiuj
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted (core dumped)

Program kompilowany jest G++ na ubuntu. Nie jest to kwestia tego, iz mam za malo pamieci RAM

ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
2

@JUZERNEJM:

W tych linijkach nie widzę problemu.
pachnie jakby coś zakombinowane w parametrach projektu / sposobie kompilacji itd

ps. ja w C++ zawsze kiedy mogę, daję const . Nie jest to wiodące dla tego problemu, ale ogólnie pomaga kompilatorowi mysleć za nas ;)

Aha, w C/ C++ chwila gdy leci wyjątek, dalece nie wskazuje, że problem zaistniał właśnie teraz i w tym punkcie. Bardzo często przyczyna jest o wiele wcześniej i w innym miejscu. Gdybyś wcześniej zrobił coś głęboko destrukcyjnego z heapem, wcale bym się nie zdziwił taki wyjatkiem.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
edytowany 2x, ostatnio: ZrobieDobrze
JU
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad rok
  • Postów:8
0

Po odpaleniu problemu w gdb dostaje blad:

Kopiuj
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider::_Alloc_hider(char*, std::allocator<char>&&) ()
Eldorad O.
  • Rejestracja:około 6 lat
  • Ostatnio:około miesiąc
  • Postów:517
0

@JUZERNEJM: Jaka wersja g++?

edytowany 1x, ostatnio: Eldorad O.
BG
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 14 godzin
  • Postów:289
5

Odpalasz pod gdb i wpisujesz:

Kopiuj
catch throw 
run 

Jak się wywali to

Kopiuj
backtrace

Po drugie - skompiluj z -fsanitize=address lub uruchom pod kontrolą valgrinda

Kopiuj
valgrind ./program

Wklej wyniki.

Jestem prawie pewien, że problemem nie jest ta funkcja tylko to co robisz z wynikiem jej działania.

edytowany 1x, ostatnio: Bartłomiej Golenko
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:7 minut
9

Nie można zreprodukować: https://godbolt.org/z/46cnM75Gh
Radzę dostarczyć Minimalny Kompletny Weryfikowalny Przykład problemu.
Już sama próba stworzenia MKWP może naprowadzić cię na źródło problemu.
Lub przynajmniej wskaże ci gdzie nie ma problemu (na 100% szukasz go w złym miejscu).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22
ZD
Też jestem zaciekawiony

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.