Onko segmentointivian ja roikkuvan osoittimen välillä eroa?


Vastaus 1:

Hirttävä osoitin

char * func ()
{
     char str [10];
     strcpy (str, "Hei!");
     palata (str);
} // palautettu osoitin osoittaa kaarille, joka on poistunut soveltamisalasta.

(Määrittelemätön käyttäytyminen)

nimenomaisesti

int * c = malloc (koko (int));
vapaa (c);
* c = 3; // kirjoittaminen vapaaseen paikkaan!

Osoittimet ja muistivuodot C: ssä

oli

jaettu dynaamisesti

tyhjä func ()
{
     char * ch;
     ch = (char *) malloc (10);
} // ch ei kelpaa ulkopuolella, ei tapa käyttää väärin muokattua muistia

10 tavua

Pino ylivuoto (verkkosivusto)


Vastaus 2:

Huomaa, että segfaultin saaminen roikkuvalta ptr: ltä on todella hyvä asia. Se ei ole * taattu, etenkin jos ptr sattuu osoittamaan näennäisesti kelvolliselle muistille pinossa tai mihin tahansa, kun käytät sitä sen jälkeen kun se alun perin kelpaa. Tässä tapauksessa sinulla on salaperäinen virhe, ei segmentti, koska muisti kirjoitetaan roskapostilla ja et tiedä miksi.

Siksi sinun on käytettävä muistivuoto- ja korruptointityökaluja, kuten Valgrind, kirjoitettaessa ei-triviaalia C-koodia.