Acronimi Forzati

Ciao a tutti,
sto avendo un problema con l’esercizio Acronimi Forzati.
Io ho creato un programma (credo) corretto, che quanto meno mi risolve i casi di esempio.
Il problema è che sottoponendolo mi appare l’errore “Execution killed with signal 11 (could be triggered by violating memory limits)” , ANCHE nei casi di esempio che invece sul mio pc sono risolti senza nessun problema.

Qualche idea del motivo? :slight_smile:

Così senza codice non saprei, magari allochi troppa memoria sullo stack?
L’errore più comune è quello di accedere a memoria non allocata, cosa che però non viene sempre rilevata dal sistema operativo, quindi magari in locale sei solo stato “fortunato”.

Dario

1 Mi Piace

Di solito questo è sintomo di un undefined behavior dovuto a una lettura / scrittura fuori dai limiti di un array / stringa. Prova a ricompilare con il flag -fsanitize=address e a eseguire, e vedi se ricevi un errore.

Non saprei, ho ricontrollato diverse volte il codice per individuare eventuali errori logici del programma ma non mi pare di individuarne. Potrebbe essere un errore sintattico che non viene rilevato dal compilatore come errore ma che porta ad un accesso su memoria non allocata?

Metto il codice:

struct elemento{
    int indice;
    long long int numero;
};

int main(){
    ifstream in("input.txt");
    ofstream out("output.txt");
    string s, a;
    int i, j;
    vector<list<elemento> > v;
    list <elemento> lista;
    elemento nuovo,massimo;
    long long int ris=0;

    in >> a;
    in >> s;

    for(i=0;i<s.size();i++){
        if(s[i]==a[0]){
            nuovo.numero=1;
            nuovo.indice=i;
            lista.push_back(nuovo);
        }
    }
    v.push_back(lista);

    while(!lista.empty())
        lista.pop_back();

    //CREAZIONE VETTORE DI LISTE
    for(i=1;i<a.size();i++){
        for(j=0;j<s.size();j++){
            if(s[j]==a[i]){
                nuovo.numero=0;
                nuovo.indice=j;
                lista.push_back(nuovo);
            }
        }
        v.push_back(lista);

        while(!lista.empty())
        lista.pop_back();
    }

    //PULIZIA DA ELEMENTI SUPERFLUI
    for(i=v.size()-2;i>=0;i--){
        massimo=v[i+1].back();
        for(list<elemento>::iterator it=v[i].begin();it!=v[i].end();it++){
            if(it->indice >= massimo.indice)
                v[i].erase(it);
        }
    }

    //CONTEGGIO
    for(i=0;i<v.size()-1;i++){
        for(list<elemento>::iterator it=v[i].begin();it!=v[i].end();it++){
            for(list<elemento>::iterator jt=v[i+1].begin();jt!=v[i+1].end();jt++){
                if(jt->indice > it->indice)
                    jt->numero=jt->numero + it->numero;
            }
        }
    }

    for(list<elemento>::iterator it=v[v.size()-1].begin();it!=v[v.size()-1].end();it++){
        ris=ris+it->numero;
    }

    out<<ris%1000000007;
    in.close();
    out.close();
    return 0;
}

Un errore sintattico che non viene rilevato ddal compilatore implicherebbe un bug nel compilatore, e penso che sia quindi altamente improbabile.

Cosa usi per compilare?

Non saprei, era più che altro un’ipotesi improbabile.
Uso Code Blocks

Vai su Project > Build Options > Compiler Flags, e poi other options. (Se hai il programma in italiano potrebbe differire). Da lì aggiungi -fsanitize=address compreso il trattino iniziale, e prova a ricompilare

Nel programma uso un vector di liste, e ogni lista è formata dalla struct elemento che a sua volta contiene un int e un long long int.
Non mi sembra un consumo di memoria “eccessivo”, quindi la escluderei come ipotesi, anche perché in tal caso l’errore dovrebbe apparire solo nelle ultime subtask che presentano stringhe di lunghezza elevata, non certamente all’inizio.
Però non si sa mai, magari sbaglio

Ho provato a fare come tu dici ma l’opzione Build Options è impossibile da selezionare. Potrebbe essere dovuto a una versione non completa del programma compilatore?

Problema risolto, sono riuscito a modificare le impostazioni.
Ho compilato ma non mi esce nessun nuovo errore

Intendi nessun errore in fase di compilazione? Prova a eseguire il programma con un caso di input (possibilmente uno un po’ grande). L’errore introdotto da -fsanitize=address dovrebbe comparire in fase di esecuzione.

E come mi rendo conto di questo errore, si arresta il programma?
Comunque, ora in compilazione (non so perché prima no) mi appare un errore relativo al confronto tra int e unsigned int (gli unsigned int penso siano i vari size() che ci ho cacciato dentro)
Ho provato a fare il cast e l’errore scompare, ma il sito continua a darmi lo stesso errore quindi non credo fosse quello il problema

Sì esatto, si arresta dicendo che c’è stato un errore (e dovrebbe anche dire in che riga è successo).

Questo warning viene attivato dal flag -Wsign-compare (implicitamente aggiunto se viene specificato -Wall). Controlla le opzioni aggiuntive che hai impostato su codeblocks.

In ogni caso non è una cosa negativa avere tanti warning, può solo aiutare :slight_smile:

P.S. il modo corretto di confrontare con i .size() non è castarli a int, bensì è usare indici di tipo size_t. Ma questo non è davvero necessario in gara :smile:

Forse ci siamo, mi sono saltati fuori un bel po’ di errori.

Ne copio alcuni:

Sulla riga del main

undefined reference to `__asan_option_detect_stack_use_after_return'|
undefined reference to `__asan_stack_malloc_5'|
undefined reference to `__asan_stack_free_5'|

Sulla riga del controllo a[0]==s[i] nel primo for (idem nello stesso controllo del secondo):

undefined reference to `__asan_report_load1'|

Ce ne sono molti altri, ma onestamente non ho la più pallida idea di cosa significhino :sweat_smile:
Intanto ti ringrazio per la pazienza e l’aiuto :grinning:

Incolla l’errore completo (puoi usare l’editor qui nel forum per inserire testo preformattato) :wink:

Se sei su windows la libreria libasan, che serve per l’opzione -sanitize=address manca, purtroppo da quanto ho capito non esiste una versione per windows.

p.s. Se per caso esistesse fatemelo sapere :wink:

2 Mi Piace

Errore completo

[details=Errore]||=== Build: Debug in acronimi forzati (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function main':| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|14|undefined reference to__asan_option_detect_stack_use_after_return’|
C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|14|undefined reference to __asan_stack_malloc_5'| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|28|undefined reference to__asan_report_load1’|
C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|28|undefined reference to __asan_report_load1'| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|42|undefined reference to__asan_report_load1’|
C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|42|undefined reference to __asan_report_load1'| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|56|undefined reference to__asan_report_load16’|
C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|59|undefined reference to __asan_report_load4'| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|71|undefined reference to__asan_report_load4’|
C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|71|undefined reference to __asan_report_load4'| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|72|undefined reference to__asan_report_load8’|
C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|72|undefined reference to __asan_report_load8'| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|72|undefined reference to__asan_report_store8’|
C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|80|undefined reference to __asan_report_load8'| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|14|undefined reference to__asan_stack_free_5’|
obj\Debug\main.o||In function _static_initialization_and_destruction_0':| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|87|undefined reference to__asan_before_dynamic_init’|
obj\Debug\main.o||In function _static_initialization_and_destruction_0':| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\iostream|74|undefined reference to__asan_after_dynamic_init’|
obj\Debug\main.o||In function GLOBAL__sub_D_00099_0_main':| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|87|undefined reference to__asan_unregister_globals’|
obj\Debug\main.o||In function GLOBAL__sub_I_00099_1_main':| C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|87|undefined reference to__asan_init_v3’|
C:\Users\Bruno\Desktop\acronimi forzati\main.cpp|87|undefined reference to __asan_register_globals'| obj\Debug\main.o||In functionZNSt6vectorISt4listI8elementoSaIS1_EESaIS3_EED1Ev’:expressionless:
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_vector.h|425|undefined reference to __asan_report_load4'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_vector.h|425|undefined reference to__asan_report_load4’|
obj\Debug\main.o||In function ZNSt6vectorISt4listI8elementoSaIS1_EESaIS3_EE9push_backERKS3_':| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_vector.h|915|undefined reference to__asan_report_load4’|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_vector.h|915|undefined reference to __asan_report_load4'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_vector.h|919|undefined reference to__asan_report_load4’|
obj\Debug\main.o:C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|882|more undefined references to __asan_report_load4' follow| obj\Debug\main.o||In functionZNSt4listI8elementoSaIS0_EE4backEv’:expressionless:
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|956|undefined reference to __asan_option_detect_stack_use_after_return'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|956|undefined reference to__asan_stack_malloc_1’|
obj\Debug\main.o||In function ZNSt4listI8elementoSaIS0_EEaSERKS2_':| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|226|undefined reference to__asan_option_detect_stack_use_after_return’|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|226|undefined reference to __asan_stack_malloc_3'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|237|undefined reference to_asan_report_store16’|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|237|undefined reference to __asan_report_load16'| obj\Debug\main.o||In functionZNSt4listI8elementoSaIS0_EE5beginEv’:expressionless:
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|772|undefined reference to __asan_report_load4'| obj\Debug\main.o||In functionZNKSt14_List_iteratorI8elementoEneERKS1
:expressionless:
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|192|undefined reference to __asan_report_load4'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|192|undefined reference to__asan_report_load4’|
obj\Debug\main.o||In function ZNSt14_List_iteratorI8elementoEppEi':| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|164|undefined reference to__asan_option_detect_stack_use_after_return’|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|164|undefined reference to __asan_stack_malloc_1'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|166|undefined reference to__asan_report_load4’|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|167|undefined reference to __asan_report_load4'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|167|undefined reference to__asan_report_load4’|
obj\Debug\main.o||In function ZNKSt14_List_iteratorI8elementoEptEv':| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_list.h|154|undefined reference to__asan_report_load4’|
obj\Debug\main.o||In function ZNSt4listI8elementoSaIS0_EE5eraseESt14_List_iteratorIS0_E':| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|146|undefined reference to__asan_option_detect_stack_use_after_return’|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|146|undefined reference to __asan_stack_malloc_1'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|153|undefined reference to__asan_report_load4’|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|153|undefined reference to __asan_report_load4'| obj\Debug\main.o||In functionZNSt12_Vector_baseISt4listI8elementoSaIS1_EESaIS3_EED2Ev’:expressionless:
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_vector.h|161|undefined reference to __asan_report_load4'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_vector.h|161|undefined reference to__asan_report_load4’|
obj\Debug\main.o||In function ZNSt10_List_baseI8elementoSaIS0_EE8_M_clearEv':| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|69|undefined reference to_asan_report_load4’|
obj\Debug\main.o:C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\list.tcc|73|more undefined references to __asan_report_load4' follow| obj\Debug\main.o||In functionZNSt6vectorISt4listI8elementoSaIS1_EESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3
:expressionless:
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\vector.tcc|326|undefined reference to `__asan_option_detect_stack_use_after_return’|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options…|
||=== Build failed: 50 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|[/details]

Sì, sono su Windows

Ah, caspita, non sapevo mancasse su windows :sweat:

Questo è l’output dopo aver compilato e eseguito su linux usando:

g++ -g -fsanitize=address acronimi.cpp
./a.out

Output:

[wil93@xps tmp]$ ./a.out
=================================================================
==6701==ERROR: AddressSanitizer: heap-use-after-free on address 0x60300000ed40 at pc 0x000000402d58 bp 0x7fff989cd5c0 sp 0x7fff989cd5b0
READ of size 8 at 0x60300000ed40 thread T0
    #0 0x402d57 in std::_List_iterator<elemento>::operator++(int) /usr/include/c++/6.2.1/bits/stl_list.h:170
    #1 0x401f1e in main /tmp/acronimi.cpp:58
    #2 0x7fc4d0597290 in __libc_start_main (/usr/lib/libc.so.6+0x20290)
    #3 0x4017b9 in _start (/tmp/a.out+0x4017b9)

0x60300000ed40 is located 0 bytes inside of 32-byte region [0x60300000ed40,0x60300000ed60)
freed by thread T0 here:
    #0 0x7fc4d1280520 in operator delete(void*) /build/gcc-multilib/src/gcc/libsanitizer/asan/asan_new_delete.cc:92
    #1 0x404df1 in __gnu_cxx::new_allocator<std::_List_node<elemento> >::deallocate(std::_List_node<elemento>*, unsigned long) /usr/include/c++/6.2.1/ext/new_allocator.h:110
    #2 0x4048e5 in std::allocator_traits<std::allocator<std::_List_node<elemento> > >::deallocate(std::allocator<std::_List_node<elemento> >&, std::_List_node<elemento>*, unsigned long) /usr/include/c++/6.2.1/bits/alloc_traits.h:442
    #3 0x403e59 in std::__cxx11::_List_base<elemento, std::allocator<elemento> >::_M_put_node(std::_List_node<elemento>*) /usr/include/c++/6.2.1/bits/stl_list.h:387
    #4 0x4036f0 in std::__cxx11::list<elemento, std::allocator<elemento> >::_M_erase(std::_List_iterator<elemento>) /usr/include/c++/6.2.1/bits/stl_list.h:1789
    #5 0x402f5a in std::__cxx11::list<elemento, std::allocator<elemento> >::erase(std::_List_const_iterator<elemento>) /usr/include/c++/6.2.1/bits/list.tcc:157
    #6 0x401f0a in main /tmp/acronimi.cpp:60
    #7 0x7fc4d0597290 in __libc_start_main (/usr/lib/libc.so.6+0x20290)

previously allocated by thread T0 here:
    #0 0x7fc4d127fea0 in operator new(unsigned long) /build/gcc-multilib/src/gcc/libsanitizer/asan/asan_new_delete.cc:60
    #1 0x405214 in __gnu_cxx::new_allocator<std::_List_node<elemento> >::allocate(unsigned long, void const*) /usr/include/c++/6.2.1/ext/new_allocator.h:104
    #2 0x404e1c in std::allocator_traits<std::allocator<std::_List_node<elemento> > >::allocate(std::allocator<std::_List_node<elemento> >&, unsigned long) /usr/include/c++/6.2.1/bits/alloc_traits.h:416
    #3 0x404906 in std::__cxx11::_List_base<elemento, std::allocator<elemento> >::_M_get_node() /usr/include/c++/6.2.1/bits/stl_list.h:383
    #4 0x403efc in std::_List_node<elemento>* std::__cxx11::list<elemento, std::allocator<elemento> >::_M_create_node<elemento const&>(elemento const&) /usr/include/c++/6.2.1/bits/stl_list.h:568
    #5 0x40320b in void std::__cxx11::list<elemento, std::allocator<elemento> >::_M_insert<elemento const&>(std::_List_iterator<elemento>, elemento const&) /usr/include/c++/6.2.1/bits/stl_list.h:1770
    #6 0x40535c in void std::__cxx11::list<elemento, std::allocator<elemento> >::emplace_back<elemento const&>(elemento const&) /usr/include/c++/6.2.1/bits/stl_list.h:1108
    #7 0x404fb6 in void std::__cxx11::list<elemento, std::allocator<elemento> >::_M_initialize_dispatch<std::_List_const_iterator<elemento> >(std::_List_const_iterator<elemento>, std::_List_const_iterator<elemento>, std::__false_type) /usr/include/c++/6.2.1/bits/stl_list.h:1699
    #8 0x404cf0 in std::__cxx11::list<elemento, std::allocator<elemento> >::list<std::_List_const_iterator<elemento>, void>(std::_List_const_iterator<elemento>, std::_List_const_iterator<elemento>, std::allocator<elemento> const&) /usr/include/c++/6.2.1/bits/stl_list.h:708
    #9 0x40469e in std::_List_iterator<elemento> std::__cxx11::list<elemento, std::allocator<elemento> >::insert<std::_List_const_iterator<elemento>, void>(std::_List_const_iterator<elemento>, std::_List_const_iterator<elemento>, std::_List_const_iterator<elemento>) /usr/include/c++/6.2.1/bits/list.tcc:136
    #10 0x403aee in void std::__cxx11::list<elemento, std::allocator<elemento> >::_M_assign_dispatch<std::_List_const_iterator<elemento> >(std::_List_const_iterator<elemento>, std::_List_const_iterator<elemento>, std::__false_type) /usr/include/c++/6.2.1/bits/list.tcc:319
    #11 0x402b80 in std::__cxx11::list<elemento, std::allocator<elemento> >::operator=(std::__cxx11::list<elemento, std::allocator<elemento> > const&) /usr/include/c++/6.2.1/bits/list.tcc:285
    #12 0x401e39 in main /tmp/acronimi.cpp:57
    #13 0x7fc4d0597290 in __libc_start_main (/usr/lib/libc.so.6+0x20290)

SUMMARY: AddressSanitizer: heap-use-after-free /usr/include/c++/6.2.1/bits/stl_list.h:170 in std::_List_iterator<elemento>::operator++(int)
Shadow bytes around the buggy address:
  0x0c067fff9d50: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9d60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9d70: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9d80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9d90: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c067fff9da0: fa fa fa fa fa fa fa fa[fd]fd fd fd fa fa 00 00
  0x0c067fff9db0: 00 00 fa fa 00 00 00 00 fa fa fd fd fd fd fa fa
  0x0c067fff9dc0: 00 00 00 00 fa fa fd fd fd fd fa fa 00 00 00 00
  0x0c067fff9dd0: fa fa 00 00 00 00 fa fa fd fd fd fd fa fa fd fd
  0x0c067fff9de0: fd fd fa fa 00 00 00 00 fa fa 00 00 00 00 fa fa
  0x0c067fff9df0: fd fd fd fa fa fa fd fd fd fd fa fa fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==6701==ABORTING

In realtà l’output sarebbe colorato in modo da facilitare la lettura, comunque la parte interessante direi che è:

READ of size 8 at 0x60300000ed40 thread T0
    #0 0x402d57 in std::_List_iterator<elemento>::operator++(int) /usr/include/c++/6.2.1/bits/stl_list.h:170
    #1 0x401f1e in main /tmp/acronimi.cpp:58

Grazie mille ancora una volta. :slight_smile:
Ora, perdona l’ignoranza persistente, ma concretamente cosa significa?

Non sono così esperto nell’uso del compilatore :cry:

Dice che nella funzione main, alla riga 58, esegui l’operatore ++ su un list::iterator, e questo causa una lettura di 8 byte non allocati (quindi undefined behavior).

Dando un’occhiata al codice penso che il problema si presenti quando esegui lista.erase(it) e poi fai it++ su un it che ormai non esiste più. Prova a cambiare in it = lista.erase(it);