Hvad er forskellen mellem en dinglende markør og en nulpinder i C? Teknisk set begge synes det samme.


Svar 1:

Der er ingen forskel, så længe du ikke udnytter nogen af ​​disse pointer. Derfor indebærer dinglende, at hukommelsen pointeren peger på, må bruges til genbrug til noget andet, men programmet antager, at det gamle indhold stadig er der og forsøger at få adgang til det. Dette fører normalt til forkert opførsel på et tidspunkt i programudførelsen.

Derudover føler jeg, at selve spørgsmålet stærkt indikerer, at du ikke "forstår pointere". Hvis du forestiller dig hukommelse som en linje med nummererede bokse, hvor hver boks kan have indhold (en værdi, normalt 0 ... 255), er pointer simpelthen et heltal (jeg forenkler arkitektoniske detaljer her), der holder nummeret (ikke værdi) af en af ​​disse bokse.


Svar 2:

Jeg ser masser af "engelsk" her, hvilket kan være nyttigt for en, der allerede kender konceptet, men for en der ikke gør det, vil kun være gibberiske tekster. Men det sjove kvotient i svarene og metaforer tikker, undskyld hvis det fornærmer nogen.

Nul pointer: En markør, der indeholder adressen til ingenting eller siger NULL placering. Skrivning på dette sted er en fejl. Dette er designet til at forhindre, at programmerere ved et uheld skriver på et hukommelsessted, der kan forårsage en segmenteringsfejl og / eller nedbrud. Tanken var altid at initialisere en markør med NULL og tjekke for NULL, før du skriver. Overvej dette scenarie:

int * p; // lige nu denne markør indeholder en tilfældig adresse, kan pege til ethvert sted, også uden for segmentet

* p = 10; // dette vil helt sikkert give fejl.

sikker måde ville være sådan som dette:

int * p = NULL;

hvis (p! = NULL)

* p = 10;

Dinglende markør: Som navnet antyder, er der på en eller anden måde frigivet en markør, hvor man skal pege, da hukommelsesblokken, som den oprindeligt pegede på, på en eller anden måde frigives.

Der er mange måder at gøre en markør sammen med. Den mest almindelige måde ville være at ny, kopiere og slette

int * p = NULL; int * q = NULL;

p = nyt x;

q = p;

slet q; // både q og hukommelsesblokmarkøren med q fjernes fra hukommelsen

// herfra har vi en markør p, der har en adresse, der ikke findes i hukommelsen. Hvis vi prøver at tildele en vis værdi til denne markør, er vi i problemer, p her dingler markøren

* p = 10; //krak

andre måder, hvorpå du sandsynligvis kan oprette en dinglende markør ved et uheld, laver en lav kopi af objektet enten ved tildeling eller ved at overføre et objekt til en metode og derved bruge kompilator, der leveres kopikonstruktør, som igen gør lav kopi for dig.


Svar 3:

Jeg ser masser af "engelsk" her, hvilket kan være nyttigt for en, der allerede kender konceptet, men for en der ikke gør det, vil kun være gibberiske tekster. Men det sjove kvotient i svarene og metaforer tikker, undskyld hvis det fornærmer nogen.

Nul pointer: En markør, der indeholder adressen til ingenting eller siger NULL placering. Skrivning på dette sted er en fejl. Dette er designet til at forhindre, at programmerere ved et uheld skriver på et hukommelsessted, der kan forårsage en segmenteringsfejl og / eller nedbrud. Tanken var altid at initialisere en markør med NULL og tjekke for NULL, før du skriver. Overvej dette scenarie:

int * p; // lige nu denne markør indeholder en tilfældig adresse, kan pege til ethvert sted, også uden for segmentet

* p = 10; // dette vil helt sikkert give fejl.

sikker måde ville være sådan som dette:

int * p = NULL;

hvis (p! = NULL)

* p = 10;

Dinglende markør: Som navnet antyder, er der på en eller anden måde frigivet en markør, hvor man skal pege, da hukommelsesblokken, som den oprindeligt pegede på, på en eller anden måde frigives.

Der er mange måder at gøre en markør sammen med. Den mest almindelige måde ville være at ny, kopiere og slette

int * p = NULL; int * q = NULL;

p = nyt x;

q = p;

slet q; // både q og hukommelsesblokmarkøren med q fjernes fra hukommelsen

// herfra har vi en markør p, der har en adresse, der ikke findes i hukommelsen. Hvis vi prøver at tildele en vis værdi til denne markør, er vi i problemer, p her dingler markøren

* p = 10; //krak

andre måder, hvorpå du sandsynligvis kan oprette en dinglende markør ved et uheld, laver en lav kopi af objektet enten ved tildeling eller ved at overføre et objekt til en metode og derved bruge kompilator, der leveres kopikonstruktør, som igen gør lav kopi for dig.


Svar 4:

Jeg ser masser af "engelsk" her, hvilket kan være nyttigt for en, der allerede kender konceptet, men for en der ikke gør det, vil kun være gibberiske tekster. Men det sjove kvotient i svarene og metaforer tikker, undskyld hvis det fornærmer nogen.

Nul pointer: En markør, der indeholder adressen til ingenting eller siger NULL placering. Skrivning på dette sted er en fejl. Dette er designet til at forhindre, at programmerere ved et uheld skriver på et hukommelsessted, der kan forårsage en segmenteringsfejl og / eller nedbrud. Tanken var altid at initialisere en markør med NULL og tjekke for NULL, før du skriver. Overvej dette scenarie:

int * p; // lige nu denne markør indeholder en tilfældig adresse, kan pege til ethvert sted, også uden for segmentet

* p = 10; // dette vil helt sikkert give fejl.

sikker måde ville være sådan som dette:

int * p = NULL;

hvis (p! = NULL)

* p = 10;

Dinglende markør: Som navnet antyder, er der på en eller anden måde frigivet en markør, hvor man skal pege, da hukommelsesblokken, som den oprindeligt pegede på, på en eller anden måde frigives.

Der er mange måder at gøre en markør sammen med. Den mest almindelige måde ville være at ny, kopiere og slette

int * p = NULL; int * q = NULL;

p = nyt x;

q = p;

slet q; // både q og hukommelsesblokmarkøren med q fjernes fra hukommelsen

// herfra har vi en markør p, der har en adresse, der ikke findes i hukommelsen. Hvis vi prøver at tildele en vis værdi til denne markør, er vi i problemer, p her dingler markøren

* p = 10; //krak

andre måder, hvorpå du sandsynligvis kan oprette en dinglende markør ved et uheld, laver en lav kopi af objektet enten ved tildeling eller ved at overføre et objekt til en metode og derved bruge kompilator, der leveres kopikonstruktør, som igen gør lav kopi for dig.


Svar 5:

Jeg ser masser af "engelsk" her, hvilket kan være nyttigt for en, der allerede kender konceptet, men for en der ikke gør det, vil kun være gibberiske tekster. Men det sjove kvotient i svarene og metaforer tikker, undskyld hvis det fornærmer nogen.

Nul pointer: En markør, der indeholder adressen til ingenting eller siger NULL placering. Skrivning på dette sted er en fejl. Dette er designet til at forhindre, at programmerere ved et uheld skriver på et hukommelsessted, der kan forårsage en segmenteringsfejl og / eller nedbrud. Tanken var altid at initialisere en markør med NULL og tjekke for NULL, før du skriver. Overvej dette scenarie:

int * p; // lige nu denne markør indeholder en tilfældig adresse, kan pege til ethvert sted, også uden for segmentet

* p = 10; // dette vil helt sikkert give fejl.

sikker måde ville være sådan som dette:

int * p = NULL;

hvis (p! = NULL)

* p = 10;

Dinglende markør: Som navnet antyder, er der på en eller anden måde frigivet en markør, hvor man skal pege, da hukommelsesblokken, som den oprindeligt pegede på, på en eller anden måde frigives.

Der er mange måder at gøre en markør sammen med. Den mest almindelige måde ville være at ny, kopiere og slette

int * p = NULL; int * q = NULL;

p = nyt x;

q = p;

slet q; // både q og hukommelsesblokmarkøren med q fjernes fra hukommelsen

// herfra har vi en markør p, der har en adresse, der ikke findes i hukommelsen. Hvis vi prøver at tildele en vis værdi til denne markør, er vi i problemer, p her dingler markøren

* p = 10; //krak

andre måder, hvorpå du sandsynligvis kan oprette en dinglende markør ved et uheld, laver en lav kopi af objektet enten ved tildeling eller ved at overføre et objekt til en metode og derved bruge kompilator, der leveres kopikonstruktør, som igen gør lav kopi for dig.


Svar 6:

Jeg ser masser af "engelsk" her, hvilket kan være nyttigt for en, der allerede kender konceptet, men for en der ikke gør det, vil kun være gibberiske tekster. Men det sjove kvotient i svarene og metaforer tikker, undskyld hvis det fornærmer nogen.

Nul pointer: En markør, der indeholder adressen til ingenting eller siger NULL placering. Skrivning på dette sted er en fejl. Dette er designet til at forhindre, at programmerere ved et uheld skriver på et hukommelsessted, der kan forårsage en segmenteringsfejl og / eller nedbrud. Tanken var altid at initialisere en markør med NULL og tjekke for NULL, før du skriver. Overvej dette scenarie:

int * p; // lige nu denne markør indeholder en tilfældig adresse, kan pege til ethvert sted, også uden for segmentet

* p = 10; // dette vil helt sikkert give fejl.

sikker måde ville være sådan som dette:

int * p = NULL;

hvis (p! = NULL)

* p = 10;

Dinglende markør: Som navnet antyder, er der på en eller anden måde frigivet en markør, hvor man skal pege, da hukommelsesblokken, som den oprindeligt pegede på, på en eller anden måde frigives.

Der er mange måder at gøre en markør sammen med. Den mest almindelige måde ville være at ny, kopiere og slette

int * p = NULL; int * q = NULL;

p = nyt x;

q = p;

slet q; // både q og hukommelsesblokmarkøren med q fjernes fra hukommelsen

// herfra har vi en markør p, der har en adresse, der ikke findes i hukommelsen. Hvis vi prøver at tildele en vis værdi til denne markør, er vi i problemer, p her dingler markøren

* p = 10; //krak

andre måder, hvorpå du sandsynligvis kan oprette en dinglende markør ved et uheld, laver en lav kopi af objektet enten ved tildeling eller ved at overføre et objekt til en metode og derved bruge kompilator, der leveres kopikonstruktør, som igen gør lav kopi for dig.


Svar 7:

Jeg ser masser af "engelsk" her, hvilket kan være nyttigt for en, der allerede kender konceptet, men for en der ikke gør det, vil kun være gibberiske tekster. Men det sjove kvotient i svarene og metaforer tikker, undskyld hvis det fornærmer nogen.

Nul pointer: En markør, der indeholder adressen til ingenting eller siger NULL placering. Skrivning på dette sted er en fejl. Dette er designet til at forhindre, at programmerere ved et uheld skriver på et hukommelsessted, der kan forårsage en segmenteringsfejl og / eller nedbrud. Tanken var altid at initialisere en markør med NULL og tjekke for NULL, før du skriver. Overvej dette scenarie:

int * p; // lige nu denne markør indeholder en tilfældig adresse, kan pege til ethvert sted, også uden for segmentet

* p = 10; // dette vil helt sikkert give fejl.

sikker måde ville være sådan som dette:

int * p = NULL;

hvis (p! = NULL)

* p = 10;

Dinglende markør: Som navnet antyder, er der på en eller anden måde frigivet en markør, hvor man skal pege, da hukommelsesblokken, som den oprindeligt pegede på, på en eller anden måde frigives.

Der er mange måder at gøre en markør sammen med. Den mest almindelige måde ville være at ny, kopiere og slette

int * p = NULL; int * q = NULL;

p = nyt x;

q = p;

slet q; // både q og hukommelsesblokmarkøren med q fjernes fra hukommelsen

// herfra har vi en markør p, der har en adresse, der ikke findes i hukommelsen. Hvis vi prøver at tildele en vis værdi til denne markør, er vi i problemer, p her dingler markøren

* p = 10; //krak

andre måder, hvorpå du sandsynligvis kan oprette en dinglende markør ved et uheld, laver en lav kopi af objektet enten ved tildeling eller ved at overføre et objekt til en metode og derved bruge kompilator, der leveres kopikonstruktør, som igen gør lav kopi for dig.


Svar 8:

Jeg ser masser af "engelsk" her, hvilket kan være nyttigt for en, der allerede kender konceptet, men for en der ikke gør det, vil kun være gibberiske tekster. Men det sjove kvotient i svarene og metaforer tikker, undskyld hvis det fornærmer nogen.

Nul pointer: En markør, der indeholder adressen til ingenting eller siger NULL placering. Skrivning på dette sted er en fejl. Dette er designet til at forhindre, at programmerere ved et uheld skriver på et hukommelsessted, der kan forårsage en segmenteringsfejl og / eller nedbrud. Tanken var altid at initialisere en markør med NULL og tjekke for NULL, før du skriver. Overvej dette scenarie:

int * p; // lige nu denne markør indeholder en tilfældig adresse, kan pege til ethvert sted, også uden for segmentet

* p = 10; // dette vil helt sikkert give fejl.

sikker måde ville være sådan som dette:

int * p = NULL;

hvis (p! = NULL)

* p = 10;

Dinglende markør: Som navnet antyder, er der på en eller anden måde frigivet en markør, hvor man skal pege, da hukommelsesblokken, som den oprindeligt pegede på, på en eller anden måde frigives.

Der er mange måder at gøre en markør sammen med. Den mest almindelige måde ville være at ny, kopiere og slette

int * p = NULL; int * q = NULL;

p = nyt x;

q = p;

slet q; // både q og hukommelsesblokmarkøren med q fjernes fra hukommelsen

// herfra har vi en markør p, der har en adresse, der ikke findes i hukommelsen. Hvis vi prøver at tildele en vis værdi til denne markør, er vi i problemer, p her dingler markøren

* p = 10; //krak

andre måder, hvorpå du sandsynligvis kan oprette en dinglende markør ved et uheld, laver en lav kopi af objektet enten ved tildeling eller ved at overføre et objekt til en metode og derved bruge kompilator, der leveres kopikonstruktør, som igen gør lav kopi for dig.


Svar 9:

Jeg ser masser af "engelsk" her, hvilket kan være nyttigt for en, der allerede kender konceptet, men for en der ikke gør det, vil kun være gibberiske tekster. Men det sjove kvotient i svarene og metaforer tikker, undskyld hvis det fornærmer nogen.

Nul pointer: En markør, der indeholder adressen til ingenting eller siger NULL placering. Skrivning på dette sted er en fejl. Dette er designet til at forhindre, at programmerere ved et uheld skriver på et hukommelsessted, der kan forårsage en segmenteringsfejl og / eller nedbrud. Tanken var altid at initialisere en markør med NULL og tjekke for NULL, før du skriver. Overvej dette scenarie:

int * p; // lige nu denne markør indeholder en tilfældig adresse, kan pege til ethvert sted, også uden for segmentet

* p = 10; // dette vil helt sikkert give fejl.

sikker måde ville være sådan som dette:

int * p = NULL;

hvis (p! = NULL)

* p = 10;

Dinglende markør: Som navnet antyder, er der på en eller anden måde frigivet en markør, hvor man skal pege, da hukommelsesblokken, som den oprindeligt pegede på, på en eller anden måde frigives.

Der er mange måder at gøre en markør sammen med. Den mest almindelige måde ville være at ny, kopiere og slette

int * p = NULL; int * q = NULL;

p = nyt x;

q = p;

slet q; // både q og hukommelsesblokmarkøren med q fjernes fra hukommelsen

// herfra har vi en markør p, der har en adresse, der ikke findes i hukommelsen. Hvis vi prøver at tildele en vis værdi til denne markør, er vi i problemer, p her dingler markøren

* p = 10; //krak

andre måder, hvorpå du sandsynligvis kan oprette en dinglende markør ved et uheld, laver en lav kopi af objektet enten ved tildeling eller ved at overføre et objekt til en metode og derved bruge kompilator, der leveres kopikonstruktør, som igen gør lav kopi for dig.


Svar 10:

Jeg ser masser af "engelsk" her, hvilket kan være nyttigt for en, der allerede kender konceptet, men for en der ikke gør det, vil kun være gibberiske tekster. Men det sjove kvotient i svarene og metaforer tikker, undskyld hvis det fornærmer nogen.

Nul pointer: En markør, der indeholder adressen til ingenting eller siger NULL placering. Skrivning på dette sted er en fejl. Dette er designet til at forhindre, at programmerere ved et uheld skriver på et hukommelsessted, der kan forårsage en segmenteringsfejl og / eller nedbrud. Tanken var altid at initialisere en markør med NULL og tjekke for NULL, før du skriver. Overvej dette scenarie:

int * p; // lige nu denne markør indeholder en tilfældig adresse, kan pege til ethvert sted, også uden for segmentet

* p = 10; // dette vil helt sikkert give fejl.

sikker måde ville være sådan som dette:

int * p = NULL;

hvis (p! = NULL)

* p = 10;

Dinglende markør: Som navnet antyder, er der på en eller anden måde frigivet en markør, hvor man skal pege, da hukommelsesblokken, som den oprindeligt pegede på, på en eller anden måde frigives.

Der er mange måder at gøre en markør sammen med. Den mest almindelige måde ville være at ny, kopiere og slette

int * p = NULL; int * q = NULL;

p = nyt x;

q = p;

slet q; // både q og hukommelsesblokmarkøren med q fjernes fra hukommelsen

// herfra har vi en markør p, der har en adresse, der ikke findes i hukommelsen. Hvis vi prøver at tildele en vis værdi til denne markør, er vi i problemer, p her dingler markøren

* p = 10; //krak

andre måder, hvorpå du sandsynligvis kan oprette en dinglende markør ved et uheld, laver en lav kopi af objektet enten ved tildeling eller ved at overføre et objekt til en metode og derved bruge kompilator, der leveres kopikonstruktør, som igen gør lav kopi for dig.