Segmentation fault: attempting to write to read-only string literal ('char *s = "hello"; s[0] = 'H';') – C STRING_LITERAL_MODIFY

STRING_LITERAL_MODIFY

Le stringhe letterali tra virgolette sono memorizzate nella sezione di memoria '.rodata' (sola lettura); tentare di modificarne un carattere tramite un puntatore genera una violazione di accesso immediata.

Cosa significa questo errore?

Le stringhe letterali tra virgolette sono memorizzate nella sezione di memoria '.rodata' (sola lettura); tentare di modificarne un carattere tramite un puntatore genera una violazione di accesso immediata.

Messaggio originale

Segmentation fault: attempting to write to read-only string literal ('char *s = "hello"; s[0] = 'H';')

Contesto e parole chiave

Alias

  • modifying string literal causes segfault C

Messaggi alternativi

  • modifica di stringa letterale in sola lettura

Prodotti

  • GCC / Clang / MSVC / GDB

Piattaforme

  • Linux
  • macOS
  • Windows

Parole chiave

  • c.runtime.string-literal-modification-sigsegv
  • errore-c-string-literal-modification-sigsegv
  • linguaggio-c
  • Segnali e Crash a Runtime

Cause possibili

Causa tecnica per Errore C: Modifica di Stringa Letterale in Sola Lettura (SIGSEGV)

Le stringhe letterali tra virgolette sono memorizzate nella sezione di memoria '.rodata' (sola lettura); tentare di modificarne un carattere tramite un puntatore genera una violazione di accesso immediata.

molto comune

Diagnosi

Diagnostica di compilazione o memoria per Errore C: Modifica di Stringa Letterale in Sola Lettura (SIGSEGV)

Compilare con flag di warning rigorosi (-Wall -Wextra -pedantic) e analizzare eventuali crash con AddressSanitizer o GDB.

Come leggere il risultato. Evidenzia warning precisi a tempo di compilazione ed esegue l'intercettazione dei memory error a runtime.

terminal
gcc -Wall -Wextra -pedantic -fsanitize=address -g main.c -o app

Risoluzione

Risoluzione standard per Errore C: Modifica di Stringa Letterale in Sola Lettura (SIGSEGV)

Difficoltà: mediaRischio: basso

Applicare la correzione al codice sorgente C secondo le buone pratiche di gestione memoria e prototipi.

  1. Ispezionare la riga segnalata dal compilatore o l'indirizzo del crash
  2. Correggere la gestione dei puntatori, firme delle funzioni o flag del linker
  3. Ricompilare e verificare l'assenza di memory leak con Valgrind o ASan
terminal
gcc -Wall -Wextra main.c -o app

Domande frequenti

Come risolvere l'errore Errore C: Modifica di Stringa Letterale in Sola Lettura (SIGSEGV) in C?

Le stringhe letterali tra virgolette sono memorizzate nella sezione di memoria '.rodata' (sola lettura); tentare di modificarne un carattere tramite un puntatore genera una violazione di accesso immediata.

Approfondimenti

Schede correlate