Kuo skiriasi pakabinamasis rodyklė nuo nulinės rodyklės C? Techniškai abu dalykai atrodo vienodi.


Atsakymas 1:

Nėra skirtumo tol, kol nepaisysite nė vieno iš tų rodyklių. Todėl pakabinimas reiškia, kad rodyklė, į kurią nukreipta rodyklė, gali būti naudojama dar kažkam, tačiau programa daro prielaidą, kad senasis turinys vis dar yra, ir bando prieiti prie jos. Paprastai tai lemia netinkamą elgesį tam tikru programos vykdymo momentu.

Be to, jaučiu, kad pats klausimas aiškiai rodo, kad jūs „nesuprantate rodyklių“. Jei įsivaizduojate atmintį kaip sunumeruotų langelių eilutę, kurioje kiekviena dėžutė gali turėti turinį (reikšmė, paprastai 0 ... 255), tada rodyklė yra tiesiog sveikasis skaičius (aš čia supaprastinu architektūros specifiką), turintis skaičių (ne vertė).


Atsakymas 2:

Čia matau daugybę „angliškų“ kalbų, kurios gali būti naudingos tiems, kurie jau žino šią sąvoką, bet tiems, kurie to nežino, tai bus ne kas kita, o niūrūs tekstai. Nepaisant to, įdomus atsakymų ir metaforų koeficientas tiksi. Atsiprašome, jei jis ką nors įžeidžia.

Null Pointer: Rodyklė, kurioje yra adresas nieko arba sakoma NULL vieta. Rašymas šioje vietoje yra kaltė. Tai skirta užkirsti kelią programuotojams netyčia įrašyti į atminties vietą, dėl kurios gali atsirasti segmentų gedimas ir (arba) gedimas. Idėja buvo visada inicijuoti žymiklį NULL ir patikrinti, ar nėra NULL prieš rašymą. Apsvarstykite šį scenarijų:

int * p; // šiuo metu šiame rodyklėje yra atsitiktinis adresas, jis gali būti nukreiptas į bet kurią vietą, net iš segmento

* p = 10; // tai tikrai sukels kaltę.

saugus būdas būtų kažkas tokio:

int * p = NULL;

if (p! = NULL)

* p = 10;

Besisukantis rodyklė: Kaip rodo pavadinimas, rodyklė, be reikalo nurodoma, kur nukreipti, nes atminties blokas, į kurį jis iš pradžių rodydavo, kažkaip yra paleistas.

Yra daugybė būdų, kaip nukreipti rodyklę. Dažniausias būdas būtų naują kopijuoti ir ištrinti

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

p = naujas x;

q = p;

trinti q; // Tiek q, tiek atminties bloko žymiklis q yra pašalinti iš atminties

// iš čia turime rodyklę p, kurios adresas nėra atmintyje. Jei bandome šiam žymekliui priskirti kokią nors vertę, mums kyla problemų, p čia yra kabančios rodyklė

* p = 10; // avarija

kiti būdai, kuriais galite netyčia sukurti kabantį rodyklę, būtų padaryti seklią objekto kopiją, paskirdami užduotį arba perduodant objektą metodui, naudodami kompiliatoriaus pateiktą kopijos konstruktorių, kuris vėlgi daro jums negilią kopiją.


Atsakymas 3:

Čia matau daugybę „angliškų“ kalbų, kurios gali būti naudingos tiems, kurie jau žino šią sąvoką, bet tiems, kurie to nežino, tai bus ne kas kita, o niūrūs tekstai. Nepaisant to, įdomus atsakymų ir metaforų koeficientas tiksi. Atsiprašome, jei jis ką nors įžeidžia.

Null Pointer: Rodyklė, kurioje yra adresas nieko arba sakoma NULL vieta. Rašymas šioje vietoje yra kaltė. Tai skirta užkirsti kelią programuotojams netyčia įrašyti į atminties vietą, dėl kurios gali atsirasti segmentų gedimas ir (arba) gedimas. Idėja buvo visada inicijuoti žymiklį NULL ir patikrinti, ar nėra NULL prieš rašymą. Apsvarstykite šį scenarijų:

int * p; // šiuo metu šiame rodyklėje yra atsitiktinis adresas, jis gali būti nukreiptas į bet kurią vietą, net iš segmento

* p = 10; // tai tikrai sukels kaltę.

saugus būdas būtų kažkas tokio:

int * p = NULL;

if (p! = NULL)

* p = 10;

Besisukantis rodyklė: Kaip rodo pavadinimas, rodyklė, be reikalo nurodoma, kur nukreipti, nes atminties blokas, į kurį jis iš pradžių rodydavo, kažkaip yra paleistas.

Yra daugybė būdų, kaip nukreipti rodyklę. Dažniausias būdas būtų naują kopijuoti ir ištrinti

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

p = naujas x;

q = p;

trinti q; // Tiek q, tiek atminties bloko žymiklis q yra pašalinti iš atminties

// iš čia turime rodyklę p, kurios adresas nėra atmintyje. Jei bandome šiam žymekliui priskirti kokią nors vertę, mums kyla problemų, p čia yra kabančios rodyklė

* p = 10; // avarija

kiti būdai, kuriais galite netyčia sukurti kabantį rodyklę, būtų padaryti seklią objekto kopiją, paskirdami užduotį arba perduodant objektą metodui, naudodami kompiliatoriaus pateiktą kopijos konstruktorių, kuris vėlgi daro jums negilią kopiją.


Atsakymas 4:

Čia matau daugybę „angliškų“ kalbų, kurios gali būti naudingos tiems, kurie jau žino šią sąvoką, bet tiems, kurie to nežino, tai bus ne kas kita, o niūrūs tekstai. Nepaisant to, įdomus atsakymų ir metaforų koeficientas tiksi. Atsiprašome, jei jis ką nors įžeidžia.

Null Pointer: Rodyklė, kurioje yra adresas nieko arba sakoma NULL vieta. Rašymas šioje vietoje yra kaltė. Tai skirta užkirsti kelią programuotojams netyčia įrašyti į atminties vietą, dėl kurios gali atsirasti segmentų gedimas ir (arba) gedimas. Idėja buvo visada inicijuoti žymiklį NULL ir patikrinti, ar nėra NULL prieš rašymą. Apsvarstykite šį scenarijų:

int * p; // šiuo metu šiame rodyklėje yra atsitiktinis adresas, jis gali būti nukreiptas į bet kurią vietą, net iš segmento

* p = 10; // tai tikrai sukels kaltę.

saugus būdas būtų kažkas tokio:

int * p = NULL;

if (p! = NULL)

* p = 10;

Besisukantis rodyklė: Kaip rodo pavadinimas, rodyklė, be reikalo nurodoma, kur nukreipti, nes atminties blokas, į kurį jis iš pradžių rodydavo, kažkaip yra paleistas.

Yra daugybė būdų, kaip nukreipti rodyklę. Dažniausias būdas būtų naują kopijuoti ir ištrinti

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

p = naujas x;

q = p;

trinti q; // Tiek q, tiek atminties bloko žymiklis q yra pašalinti iš atminties

// iš čia turime rodyklę p, kurios adresas nėra atmintyje. Jei bandome šiam žymekliui priskirti kokią nors vertę, mums kyla problemų, p čia yra kabančios rodyklė

* p = 10; // avarija

kiti būdai, kuriais galite netyčia sukurti kabantį rodyklę, būtų padaryti seklią objekto kopiją, paskirdami užduotį arba perduodant objektą metodui, naudodami kompiliatoriaus pateiktą kopijos konstruktorių, kuris vėlgi daro jums negilią kopiją.


Atsakymas 5:

Čia matau daugybę „angliškų“ kalbų, kurios gali būti naudingos tiems, kurie jau žino šią sąvoką, bet tiems, kurie to nežino, tai bus ne kas kita, o niūrūs tekstai. Nepaisant to, įdomus atsakymų ir metaforų koeficientas tiksi. Atsiprašome, jei jis ką nors įžeidžia.

Null Pointer: Rodyklė, kurioje yra adresas nieko arba sakoma NULL vieta. Rašymas šioje vietoje yra kaltė. Tai skirta užkirsti kelią programuotojams netyčia įrašyti į atminties vietą, dėl kurios gali atsirasti segmentų gedimas ir (arba) gedimas. Idėja buvo visada inicijuoti žymiklį NULL ir patikrinti, ar nėra NULL prieš rašymą. Apsvarstykite šį scenarijų:

int * p; // šiuo metu šiame rodyklėje yra atsitiktinis adresas, jis gali būti nukreiptas į bet kurią vietą, net iš segmento

* p = 10; // tai tikrai sukels kaltę.

saugus būdas būtų kažkas tokio:

int * p = NULL;

if (p! = NULL)

* p = 10;

Besisukantis rodyklė: Kaip rodo pavadinimas, rodyklė, be reikalo nurodoma, kur nukreipti, nes atminties blokas, į kurį jis iš pradžių rodydavo, kažkaip yra paleistas.

Yra daugybė būdų, kaip nukreipti rodyklę. Dažniausias būdas būtų naują kopijuoti ir ištrinti

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

p = naujas x;

q = p;

trinti q; // Tiek q, tiek atminties bloko žymiklis q yra pašalinti iš atminties

// iš čia turime rodyklę p, kurios adresas nėra atmintyje. Jei bandome šiam žymekliui priskirti kokią nors vertę, mums kyla problemų, p čia yra kabančios rodyklė

* p = 10; // avarija

kiti būdai, kuriais galite netyčia sukurti kabantį rodyklę, būtų padaryti seklią objekto kopiją, paskirdami užduotį arba perduodant objektą metodui, naudodami kompiliatoriaus pateiktą kopijos konstruktorių, kuris vėlgi daro jums negilią kopiją.


Atsakymas 6:

Čia matau daugybę „angliškų“ kalbų, kurios gali būti naudingos tiems, kurie jau žino šią sąvoką, bet tiems, kurie to nežino, tai bus ne kas kita, o niūrūs tekstai. Nepaisant to, įdomus atsakymų ir metaforų koeficientas tiksi. Atsiprašome, jei jis ką nors įžeidžia.

Null Pointer: Rodyklė, kurioje yra adresas nieko arba sakoma NULL vieta. Rašymas šioje vietoje yra kaltė. Tai skirta užkirsti kelią programuotojams netyčia įrašyti į atminties vietą, dėl kurios gali atsirasti segmentų gedimas ir (arba) gedimas. Idėja buvo visada inicijuoti žymiklį NULL ir patikrinti, ar nėra NULL prieš rašymą. Apsvarstykite šį scenarijų:

int * p; // šiuo metu šiame rodyklėje yra atsitiktinis adresas, jis gali būti nukreiptas į bet kurią vietą, net iš segmento

* p = 10; // tai tikrai sukels kaltę.

saugus būdas būtų kažkas tokio:

int * p = NULL;

if (p! = NULL)

* p = 10;

Besisukantis rodyklė: Kaip rodo pavadinimas, rodyklė, be reikalo nurodoma, kur nukreipti, nes atminties blokas, į kurį jis iš pradžių rodydavo, kažkaip yra paleistas.

Yra daugybė būdų, kaip nukreipti rodyklę. Dažniausias būdas būtų naują kopijuoti ir ištrinti

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

p = naujas x;

q = p;

trinti q; // Tiek q, tiek atminties bloko žymiklis q yra pašalinti iš atminties

// iš čia turime rodyklę p, kurios adresas nėra atmintyje. Jei bandome šiam žymekliui priskirti kokią nors vertę, mums kyla problemų, p čia yra kabančios rodyklė

* p = 10; // avarija

kiti būdai, kuriais galite netyčia sukurti kabantį rodyklę, būtų padaryti seklią objekto kopiją, paskirdami užduotį arba perduodant objektą metodui, naudodami kompiliatoriaus pateiktą kopijos konstruktorių, kuris vėlgi daro jums negilią kopiją.


Atsakymas 7:

Čia matau daugybę „angliškų“ kalbų, kurios gali būti naudingos tiems, kurie jau žino šią sąvoką, bet tiems, kurie to nežino, tai bus ne kas kita, o niūrūs tekstai. Nepaisant to, įdomus atsakymų ir metaforų koeficientas tiksi. Atsiprašome, jei jis ką nors įžeidžia.

Null Pointer: Rodyklė, kurioje yra adresas nieko arba sakoma NULL vieta. Rašymas šioje vietoje yra kaltė. Tai skirta užkirsti kelią programuotojams netyčia įrašyti į atminties vietą, dėl kurios gali atsirasti segmentų gedimas ir (arba) gedimas. Idėja buvo visada inicijuoti žymiklį NULL ir patikrinti, ar nėra NULL prieš rašymą. Apsvarstykite šį scenarijų:

int * p; // šiuo metu šiame rodyklėje yra atsitiktinis adresas, jis gali būti nukreiptas į bet kurią vietą, net iš segmento

* p = 10; // tai tikrai sukels kaltę.

saugus būdas būtų kažkas tokio:

int * p = NULL;

if (p! = NULL)

* p = 10;

Besisukantis rodyklė: Kaip rodo pavadinimas, rodyklė, be reikalo nurodoma, kur nukreipti, nes atminties blokas, į kurį jis iš pradžių rodydavo, kažkaip yra paleistas.

Yra daugybė būdų, kaip nukreipti rodyklę. Dažniausias būdas būtų naują kopijuoti ir ištrinti

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

p = naujas x;

q = p;

trinti q; // Tiek q, tiek atminties bloko žymiklis q yra pašalinti iš atminties

// iš čia turime rodyklę p, kurios adresas nėra atmintyje. Jei bandome šiam žymekliui priskirti kokią nors vertę, mums kyla problemų, p čia yra kabančios rodyklė

* p = 10; // avarija

kiti būdai, kuriais galite netyčia sukurti kabantį rodyklę, būtų padaryti seklią objekto kopiją, paskirdami užduotį arba perduodant objektą metodui, naudodami kompiliatoriaus pateiktą kopijos konstruktorių, kuris vėlgi daro jums negilią kopiją.


Atsakymas 8:

Čia matau daugybę „angliškų“ kalbų, kurios gali būti naudingos tiems, kurie jau žino šią sąvoką, bet tiems, kurie to nežino, tai bus ne kas kita, o niūrūs tekstai. Nepaisant to, įdomus atsakymų ir metaforų koeficientas tiksi. Atsiprašome, jei jis ką nors įžeidžia.

Null Pointer: Rodyklė, kurioje yra adresas nieko arba sakoma NULL vieta. Rašymas šioje vietoje yra kaltė. Tai skirta užkirsti kelią programuotojams netyčia įrašyti į atminties vietą, dėl kurios gali atsirasti segmentų gedimas ir (arba) gedimas. Idėja buvo visada inicijuoti žymiklį NULL ir patikrinti, ar nėra NULL prieš rašymą. Apsvarstykite šį scenarijų:

int * p; // šiuo metu šiame rodyklėje yra atsitiktinis adresas, jis gali būti nukreiptas į bet kurią vietą, net iš segmento

* p = 10; // tai tikrai sukels kaltę.

saugus būdas būtų kažkas tokio:

int * p = NULL;

if (p! = NULL)

* p = 10;

Besisukantis rodyklė: Kaip rodo pavadinimas, rodyklė, be reikalo nurodoma, kur nukreipti, nes atminties blokas, į kurį jis iš pradžių rodydavo, kažkaip yra paleistas.

Yra daugybė būdų, kaip nukreipti rodyklę. Dažniausias būdas būtų naują kopijuoti ir ištrinti

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

p = naujas x;

q = p;

trinti q; // Tiek q, tiek atminties bloko žymiklis q yra pašalinti iš atminties

// iš čia turime rodyklę p, kurios adresas nėra atmintyje. Jei bandome šiam žymekliui priskirti kokią nors vertę, mums kyla problemų, p čia yra kabančios rodyklė

* p = 10; // avarija

kiti būdai, kuriais galite netyčia sukurti kabantį rodyklę, būtų padaryti seklią objekto kopiją, paskirdami užduotį arba perduodant objektą metodui, naudodami kompiliatoriaus pateiktą kopijos konstruktorių, kuris vėlgi daro jums negilią kopiją.


Atsakymas 9:

Čia matau daugybę „angliškų“ kalbų, kurios gali būti naudingos tiems, kurie jau žino šią sąvoką, bet tiems, kurie to nežino, tai bus ne kas kita, o niūrūs tekstai. Nepaisant to, įdomus atsakymų ir metaforų koeficientas tiksi. Atsiprašome, jei jis ką nors įžeidžia.

Null Pointer: Rodyklė, kurioje yra adresas nieko arba sakoma NULL vieta. Rašymas šioje vietoje yra kaltė. Tai skirta užkirsti kelią programuotojams netyčia įrašyti į atminties vietą, dėl kurios gali atsirasti segmentų gedimas ir (arba) gedimas. Idėja buvo visada inicijuoti žymiklį NULL ir patikrinti, ar nėra NULL prieš rašymą. Apsvarstykite šį scenarijų:

int * p; // šiuo metu šiame rodyklėje yra atsitiktinis adresas, jis gali būti nukreiptas į bet kurią vietą, net iš segmento

* p = 10; // tai tikrai sukels kaltę.

saugus būdas būtų kažkas tokio:

int * p = NULL;

if (p! = NULL)

* p = 10;

Besisukantis rodyklė: Kaip rodo pavadinimas, rodyklė, be reikalo nurodoma, kur nukreipti, nes atminties blokas, į kurį jis iš pradžių rodydavo, kažkaip yra paleistas.

Yra daugybė būdų, kaip nukreipti rodyklę. Dažniausias būdas būtų naują kopijuoti ir ištrinti

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

p = naujas x;

q = p;

trinti q; // Tiek q, tiek atminties bloko žymiklis q yra pašalinti iš atminties

// iš čia turime rodyklę p, kurios adresas nėra atmintyje. Jei bandome šiam žymekliui priskirti kokią nors vertę, mums kyla problemų, p čia yra kabančios rodyklė

* p = 10; // avarija

kiti būdai, kuriais galite netyčia sukurti kabantį rodyklę, būtų padaryti seklią objekto kopiją, paskirdami užduotį arba perduodant objektą metodui, naudodami kompiliatoriaus pateiktą kopijos konstruktorių, kuris vėlgi daro jums negilią kopiją.


Atsakymas 10:

Čia matau daugybę „angliškų“ kalbų, kurios gali būti naudingos tiems, kurie jau žino šią sąvoką, bet tiems, kurie to nežino, tai bus ne kas kita, o niūrūs tekstai. Nepaisant to, įdomus atsakymų ir metaforų koeficientas tiksi. Atsiprašome, jei jis ką nors įžeidžia.

Null Pointer: Rodyklė, kurioje yra adresas nieko arba sakoma NULL vieta. Rašymas šioje vietoje yra kaltė. Tai skirta užkirsti kelią programuotojams netyčia įrašyti į atminties vietą, dėl kurios gali atsirasti segmentų gedimas ir (arba) gedimas. Idėja buvo visada inicijuoti žymiklį NULL ir patikrinti, ar nėra NULL prieš rašymą. Apsvarstykite šį scenarijų:

int * p; // šiuo metu šiame rodyklėje yra atsitiktinis adresas, jis gali būti nukreiptas į bet kurią vietą, net iš segmento

* p = 10; // tai tikrai sukels kaltę.

saugus būdas būtų kažkas tokio:

int * p = NULL;

if (p! = NULL)

* p = 10;

Besisukantis rodyklė: Kaip rodo pavadinimas, rodyklė, be reikalo nurodoma, kur nukreipti, nes atminties blokas, į kurį jis iš pradžių rodydavo, kažkaip yra paleistas.

Yra daugybė būdų, kaip nukreipti rodyklę. Dažniausias būdas būtų naują kopijuoti ir ištrinti

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

p = naujas x;

q = p;

trinti q; // Tiek q, tiek atminties bloko žymiklis q yra pašalinti iš atminties

// iš čia turime rodyklę p, kurios adresas nėra atmintyje. Jei bandome šiam žymekliui priskirti kokią nors vertę, mums kyla problemų, p čia yra kabančios rodyklė

* p = 10; // avarija

kiti būdai, kuriais galite netyčia sukurti kabantį rodyklę, būtų padaryti seklią objekto kopiją, paskirdami užduotį arba perduodant objektą metodui, naudodami kompiliatoriaus pateiktą kopijos konstruktorių, kuris vėlgi daro jums negilią kopiją.