Altre risposte dicono il punto di vista dal punto di vista degli standard, ma ecco perché si verifica un arresto anomalo dello.
I compilatori in genere inseriscono letterali di programma, in particolare stringhe, nella memoria di sola lettura. La memoria è contrassegnata in sola lettura dal sistema operativo, quindi qualsiasi tentativo di scrittura su di esso verrà intrappolato e, sulla piattaforma, questo è ciò che indica l'errore di segmentazione; un tentativo di eseguire un'operazione su una memoria che non è consentita. L'altro tipo di arresto anomalo associato a un cattivo utilizzo della memoria è un errore del bus, che in genere indica un accesso non allineato alla memoria o una scrittura a una pagina che non è mappata affatto. Per il codice C, la differenza è quasi interamente accademica (alcune altre implementazioni linguistiche utilizzano questi errori per aiutarli a gestire la memoria).
Si noti che il trapping delle scritture in sola lettura è indipendente dalla semantica ufficiale della lingua. Mentre potresti avere un char*
che punta ad esso, non puoi ancora scriverlo. Trattate sempre i valori letterali del programma come se puntassero a memoria costante e non vi sbagliate (che non lo sono per impostazione predefinita a causa della necessità di supportare la compatibilità con programmi meno recenti).
fonte
2010-09-03 19:32:33
Quale piattaforma? Per me va bene... –