bad_alloc przy konkatenacji stringow

0

Mam metode:

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

Kazdej jej wywolanie konczy sie

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

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.

0

Po odpaleniu problemu w gdb dostaje blad:

std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider::_Alloc_hider(char*, std::allocator<char>&&) ()
0

@JUZERNEJM: Jaka wersja g++?

5

Odpalasz pod gdb i wpisujesz:

catch throw 
run 

Jak się wywali to

backtrace

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

valgrind ./program

Wklej wyniki.

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

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).

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