Jaký je rozdíl mezi visícím ukazatelem a nulovým ukazatelem v C? Technicky se oba zdají stejné.


Odpověď 1:

Není žádný rozdíl, dokud neodrazíte žádný z těchto ukazatelů. Houpání tedy znamená, že paměti, na kterou odkazuje ukazatel, je povoleno znovu použít pro něco jiného, ​​ale program předpokládá, že starý obsah je stále tam a pokouší se k němu přistupovat. To obvykle vede k nesprávnému chování v určitém okamžiku provádění programu.

Kromě toho cítím, že samotná otázka silně naznačuje, že „nerozumíte ukazatelům“. Pokud si představujete paměť jako řádek očíslovaných polí, kde každé pole může mít obsah (hodnota, obvykle 0 ... 255), pak je ukazatel jednoduše celé číslo (zde zjednodušuji architektonická specifika), které drží číslo (nikoli hodnota) jednoho z těchto polí.


Odpověď 2:

Vidím zde spoustu „angličtiny“, což by mohlo být užitečné pro někoho, kdo tento koncept již zná, ale pro někoho, kdo to neví, nebudou nic jiného než bláboly. Zábavný kvocient v odpovědích a metaforách však tiká, omlouvám se, pokud to někoho uráží.

Null Ukazatel: Ukazatel, který obsahuje adresu k ničemu nebo říká NULL umístění. Zápis na tomto místě je chyba. Účelem je zabránit programátorům v náhodném zápisu na paměťové místo, které by mohlo způsobit chybu segmentace nebo selhání. Cílem bylo vždy inicializovat ukazatel pomocí NULL a před zápisem zkontrolovat NULL. Zvažte tento scénář:

int * p; // právě teď tento ukazatel obsahuje náhodnou adresu, může směřovat na libovolné místo, dokonce i mimo segment

* p = 10; // to určitě způsobí chybu.

bezpečný způsob by byl něco takového:

int * p = NULL;

pokud (p! = NULL)

* p = 10;

Houpající se ukazatel: Jak název napovídá, ukazatel, který je bezradný, kam směřovat od paměťového bloku, na který původně ukazoval, je nějak uvolněn.

Existuje mnoho způsobů, jak vytvořit ukazatel viset. Nejběžnějším způsobem by bylo nové, kopírování a mazání

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

p = nové x;

q = p;

smazat q; // Ukazatel q i paměťového bloku q jsou z paměti odstraněny

// odtud máme ukazatel p, který má adresu, která v paměti neexistuje. Pokusíme-li se tomuto ukazateli přiřadit nějakou hodnotu, máme potíže, p zde je visící ukazatel

* p = 10; //pád

jiné způsoby, jak byste mohli pravděpodobně vytvořit visící ukazatel náhodně, by dělali mělkou kopii objektu buď přiřazením nebo předáním objektu metodě, čímž by použili konstruktor kopií poskytovaného kompilátorem, který pro vás opět provede mělkou kopii.


Odpověď 3:

Vidím zde spoustu „angličtiny“, což by mohlo být užitečné pro někoho, kdo tento koncept již zná, ale pro někoho, kdo to neví, nebudou nic jiného než bláboly. Zábavný kvocient v odpovědích a metaforách však tiká, omlouvám se, pokud to někoho uráží.

Null Ukazatel: Ukazatel, který obsahuje adresu k ničemu nebo říká NULL umístění. Zápis na tomto místě je chyba. Účelem je zabránit programátorům v náhodném zápisu na paměťové místo, které by mohlo způsobit chybu segmentace nebo selhání. Cílem bylo vždy inicializovat ukazatel pomocí NULL a před zápisem zkontrolovat NULL. Zvažte tento scénář:

int * p; // právě teď tento ukazatel obsahuje náhodnou adresu, může směřovat na libovolné místo, dokonce i mimo segment

* p = 10; // to určitě způsobí chybu.

bezpečný způsob by byl něco takového:

int * p = NULL;

pokud (p! = NULL)

* p = 10;

Houpající se ukazatel: Jak název napovídá, ukazatel, který je bezradný, kam směřovat od paměťového bloku, na který původně ukazoval, je nějak uvolněn.

Existuje mnoho způsobů, jak vytvořit ukazatel viset. Nejběžnějším způsobem by bylo nové, kopírování a mazání

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

p = nové x;

q = p;

smazat q; // Ukazatel q i paměťového bloku q jsou z paměti odstraněny

// odtud máme ukazatel p, který má adresu, která v paměti neexistuje. Pokusíme-li se tomuto ukazateli přiřadit nějakou hodnotu, máme potíže, p zde je visící ukazatel

* p = 10; //pád

jiné způsoby, jak byste mohli pravděpodobně vytvořit visící ukazatel náhodně, by dělali mělkou kopii objektu buď přiřazením nebo předáním objektu metodě, čímž by použili konstruktor kopií poskytovaného kompilátorem, který pro vás opět provede mělkou kopii.


Odpověď 4:

Vidím zde spoustu „angličtiny“, což by mohlo být užitečné pro někoho, kdo tento koncept již zná, ale pro někoho, kdo to neví, nebudou nic jiného než bláboly. Zábavný kvocient v odpovědích a metaforách však tiká, omlouvám se, pokud to někoho uráží.

Null Ukazatel: Ukazatel, který obsahuje adresu k ničemu nebo říká NULL umístění. Zápis na tomto místě je chyba. Účelem je zabránit programátorům v náhodném zápisu na paměťové místo, které by mohlo způsobit chybu segmentace nebo selhání. Cílem bylo vždy inicializovat ukazatel pomocí NULL a před zápisem zkontrolovat NULL. Zvažte tento scénář:

int * p; // právě teď tento ukazatel obsahuje náhodnou adresu, může směřovat na libovolné místo, dokonce i mimo segment

* p = 10; // to určitě způsobí chybu.

bezpečný způsob by byl něco takového:

int * p = NULL;

pokud (p! = NULL)

* p = 10;

Houpající se ukazatel: Jak název napovídá, ukazatel, který je bezradný, kam směřovat od paměťového bloku, na který původně ukazoval, je nějak uvolněn.

Existuje mnoho způsobů, jak vytvořit ukazatel viset. Nejběžnějším způsobem by bylo nové, kopírování a mazání

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

p = nové x;

q = p;

smazat q; // Ukazatel q i paměťového bloku q jsou z paměti odstraněny

// odtud máme ukazatel p, který má adresu, která v paměti neexistuje. Pokusíme-li se tomuto ukazateli přiřadit nějakou hodnotu, máme potíže, p zde je visící ukazatel

* p = 10; //pád

jiné způsoby, jak byste mohli pravděpodobně vytvořit visící ukazatel náhodně, by dělali mělkou kopii objektu buď přiřazením nebo předáním objektu metodě, čímž by použili konstruktor kopií poskytovaného kompilátorem, který pro vás opět provede mělkou kopii.


Odpověď 5:

Vidím zde spoustu „angličtiny“, což by mohlo být užitečné pro někoho, kdo tento koncept již zná, ale pro někoho, kdo to neví, nebudou nic jiného než bláboly. Zábavný kvocient v odpovědích a metaforách však tiká, omlouvám se, pokud to někoho uráží.

Null Ukazatel: Ukazatel, který obsahuje adresu k ničemu nebo říká NULL umístění. Zápis na tomto místě je chyba. Účelem je zabránit programátorům v náhodném zápisu na paměťové místo, které by mohlo způsobit chybu segmentace nebo selhání. Cílem bylo vždy inicializovat ukazatel pomocí NULL a před zápisem zkontrolovat NULL. Zvažte tento scénář:

int * p; // právě teď tento ukazatel obsahuje náhodnou adresu, může směřovat na libovolné místo, dokonce i mimo segment

* p = 10; // to určitě způsobí chybu.

bezpečný způsob by byl něco takového:

int * p = NULL;

pokud (p! = NULL)

* p = 10;

Houpající se ukazatel: Jak název napovídá, ukazatel, který je bezradný, kam směřovat od paměťového bloku, na který původně ukazoval, je nějak uvolněn.

Existuje mnoho způsobů, jak vytvořit ukazatel viset. Nejběžnějším způsobem by bylo nové, kopírování a mazání

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

p = nové x;

q = p;

smazat q; // Ukazatel q i paměťového bloku q jsou z paměti odstraněny

// odtud máme ukazatel p, který má adresu, která v paměti neexistuje. Pokusíme-li se tomuto ukazateli přiřadit nějakou hodnotu, máme potíže, p zde je visící ukazatel

* p = 10; //pád

jiné způsoby, jak byste mohli pravděpodobně vytvořit visící ukazatel náhodně, by dělali mělkou kopii objektu buď přiřazením nebo předáním objektu metodě, čímž by použili konstruktor kopií poskytovaného kompilátorem, který pro vás opět provede mělkou kopii.


Odpověď 6:

Vidím zde spoustu „angličtiny“, což by mohlo být užitečné pro někoho, kdo tento koncept již zná, ale pro někoho, kdo to neví, nebudou nic jiného než bláboly. Zábavný kvocient v odpovědích a metaforách však tiká, omlouvám se, pokud to někoho uráží.

Null Ukazatel: Ukazatel, který obsahuje adresu k ničemu nebo říká NULL umístění. Zápis na tomto místě je chyba. Účelem je zabránit programátorům v náhodném zápisu na paměťové místo, které by mohlo způsobit chybu segmentace nebo selhání. Cílem bylo vždy inicializovat ukazatel pomocí NULL a před zápisem zkontrolovat NULL. Zvažte tento scénář:

int * p; // právě teď tento ukazatel obsahuje náhodnou adresu, může směřovat na libovolné místo, dokonce i mimo segment

* p = 10; // to určitě způsobí chybu.

bezpečný způsob by byl něco takového:

int * p = NULL;

pokud (p! = NULL)

* p = 10;

Houpající se ukazatel: Jak název napovídá, ukazatel, který je bezradný, kam směřovat od paměťového bloku, na který původně ukazoval, je nějak uvolněn.

Existuje mnoho způsobů, jak vytvořit ukazatel viset. Nejběžnějším způsobem by bylo nové, kopírování a mazání

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

p = nové x;

q = p;

smazat q; // Ukazatel q i paměťového bloku q jsou z paměti odstraněny

// odtud máme ukazatel p, který má adresu, která v paměti neexistuje. Pokusíme-li se tomuto ukazateli přiřadit nějakou hodnotu, máme potíže, p zde je visící ukazatel

* p = 10; //pád

jiné způsoby, jak byste mohli pravděpodobně vytvořit visící ukazatel náhodně, by dělali mělkou kopii objektu buď přiřazením nebo předáním objektu metodě, čímž by použili konstruktor kopií poskytovaného kompilátorem, který pro vás opět provede mělkou kopii.


Odpověď 7:

Vidím zde spoustu „angličtiny“, což by mohlo být užitečné pro někoho, kdo tento koncept již zná, ale pro někoho, kdo to neví, nebudou nic jiného než bláboly. Zábavný kvocient v odpovědích a metaforách však tiká, omlouvám se, pokud to někoho uráží.

Null Ukazatel: Ukazatel, který obsahuje adresu k ničemu nebo říká NULL umístění. Zápis na tomto místě je chyba. Účelem je zabránit programátorům v náhodném zápisu na paměťové místo, které by mohlo způsobit chybu segmentace nebo selhání. Cílem bylo vždy inicializovat ukazatel pomocí NULL a před zápisem zkontrolovat NULL. Zvažte tento scénář:

int * p; // právě teď tento ukazatel obsahuje náhodnou adresu, může směřovat na libovolné místo, dokonce i mimo segment

* p = 10; // to určitě způsobí chybu.

bezpečný způsob by byl něco takového:

int * p = NULL;

pokud (p! = NULL)

* p = 10;

Houpající se ukazatel: Jak název napovídá, ukazatel, který je bezradný, kam směřovat od paměťového bloku, na který původně ukazoval, je nějak uvolněn.

Existuje mnoho způsobů, jak vytvořit ukazatel viset. Nejběžnějším způsobem by bylo nové, kopírování a mazání

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

p = nové x;

q = p;

smazat q; // Ukazatel q i paměťového bloku q jsou z paměti odstraněny

// odtud máme ukazatel p, který má adresu, která v paměti neexistuje. Pokusíme-li se tomuto ukazateli přiřadit nějakou hodnotu, máme potíže, p zde je visící ukazatel

* p = 10; //pád

jiné způsoby, jak byste mohli pravděpodobně vytvořit visící ukazatel náhodně, by dělali mělkou kopii objektu buď přiřazením nebo předáním objektu metodě, čímž by použili konstruktor kopií poskytovaného kompilátorem, který pro vás opět provede mělkou kopii.


Odpověď 8:

Vidím zde spoustu „angličtiny“, což by mohlo být užitečné pro někoho, kdo tento koncept již zná, ale pro někoho, kdo to neví, nebudou nic jiného než bláboly. Zábavný kvocient v odpovědích a metaforách však tiká, omlouvám se, pokud to někoho uráží.

Null Ukazatel: Ukazatel, který obsahuje adresu k ničemu nebo říká NULL umístění. Zápis na tomto místě je chyba. Účelem je zabránit programátorům v náhodném zápisu na paměťové místo, které by mohlo způsobit chybu segmentace nebo selhání. Cílem bylo vždy inicializovat ukazatel pomocí NULL a před zápisem zkontrolovat NULL. Zvažte tento scénář:

int * p; // právě teď tento ukazatel obsahuje náhodnou adresu, může směřovat na libovolné místo, dokonce i mimo segment

* p = 10; // to určitě způsobí chybu.

bezpečný způsob by byl něco takového:

int * p = NULL;

pokud (p! = NULL)

* p = 10;

Houpající se ukazatel: Jak název napovídá, ukazatel, který je bezradný, kam směřovat od paměťového bloku, na který původně ukazoval, je nějak uvolněn.

Existuje mnoho způsobů, jak vytvořit ukazatel viset. Nejběžnějším způsobem by bylo nové, kopírování a mazání

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

p = nové x;

q = p;

smazat q; // Ukazatel q i paměťového bloku q jsou z paměti odstraněny

// odtud máme ukazatel p, který má adresu, která v paměti neexistuje. Pokusíme-li se tomuto ukazateli přiřadit nějakou hodnotu, máme potíže, p zde je visící ukazatel

* p = 10; //pád

jiné způsoby, jak byste mohli pravděpodobně vytvořit visící ukazatel náhodně, by dělali mělkou kopii objektu buď přiřazením nebo předáním objektu metodě, čímž by použili konstruktor kopií poskytovaného kompilátorem, který pro vás opět provede mělkou kopii.


Odpověď 9:

Vidím zde spoustu „angličtiny“, což by mohlo být užitečné pro někoho, kdo tento koncept již zná, ale pro někoho, kdo to neví, nebudou nic jiného než bláboly. Zábavný kvocient v odpovědích a metaforách však tiká, omlouvám se, pokud to někoho uráží.

Null Ukazatel: Ukazatel, který obsahuje adresu k ničemu nebo říká NULL umístění. Zápis na tomto místě je chyba. Účelem je zabránit programátorům v náhodném zápisu na paměťové místo, které by mohlo způsobit chybu segmentace nebo selhání. Cílem bylo vždy inicializovat ukazatel pomocí NULL a před zápisem zkontrolovat NULL. Zvažte tento scénář:

int * p; // právě teď tento ukazatel obsahuje náhodnou adresu, může směřovat na libovolné místo, dokonce i mimo segment

* p = 10; // to určitě způsobí chybu.

bezpečný způsob by byl něco takového:

int * p = NULL;

pokud (p! = NULL)

* p = 10;

Houpající se ukazatel: Jak název napovídá, ukazatel, který je bezradný, kam směřovat od paměťového bloku, na který původně ukazoval, je nějak uvolněn.

Existuje mnoho způsobů, jak vytvořit ukazatel viset. Nejběžnějším způsobem by bylo nové, kopírování a mazání

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

p = nové x;

q = p;

smazat q; // Ukazatel q i paměťového bloku q jsou z paměti odstraněny

// odtud máme ukazatel p, který má adresu, která v paměti neexistuje. Pokusíme-li se tomuto ukazateli přiřadit nějakou hodnotu, máme potíže, p zde je visící ukazatel

* p = 10; //pád

jiné způsoby, jak byste mohli pravděpodobně vytvořit visící ukazatel náhodně, by dělali mělkou kopii objektu buď přiřazením nebo předáním objektu metodě, čímž by použili konstruktor kopií poskytovaného kompilátorem, který pro vás opět provede mělkou kopii.


Odpověď 10:

Vidím zde spoustu „angličtiny“, což by mohlo být užitečné pro někoho, kdo tento koncept již zná, ale pro někoho, kdo to neví, nebudou nic jiného než bláboly. Zábavný kvocient v odpovědích a metaforách však tiká, omlouvám se, pokud to někoho uráží.

Null Ukazatel: Ukazatel, který obsahuje adresu k ničemu nebo říká NULL umístění. Zápis na tomto místě je chyba. Účelem je zabránit programátorům v náhodném zápisu na paměťové místo, které by mohlo způsobit chybu segmentace nebo selhání. Cílem bylo vždy inicializovat ukazatel pomocí NULL a před zápisem zkontrolovat NULL. Zvažte tento scénář:

int * p; // právě teď tento ukazatel obsahuje náhodnou adresu, může směřovat na libovolné místo, dokonce i mimo segment

* p = 10; // to určitě způsobí chybu.

bezpečný způsob by byl něco takového:

int * p = NULL;

pokud (p! = NULL)

* p = 10;

Houpající se ukazatel: Jak název napovídá, ukazatel, který je bezradný, kam směřovat od paměťového bloku, na který původně ukazoval, je nějak uvolněn.

Existuje mnoho způsobů, jak vytvořit ukazatel viset. Nejběžnějším způsobem by bylo nové, kopírování a mazání

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

p = nové x;

q = p;

smazat q; // Ukazatel q i paměťového bloku q jsou z paměti odstraněny

// odtud máme ukazatel p, který má adresu, která v paměti neexistuje. Pokusíme-li se tomuto ukazateli přiřadit nějakou hodnotu, máme potíže, p zde je visící ukazatel

* p = 10; //pád

jiné způsoby, jak byste mohli pravděpodobně vytvořit visící ukazatel náhodně, by dělali mělkou kopii objektu buď přiřazením nebo předáním objektu metodě, čímž by použili konstruktor kopií poskytovaného kompilátorem, který pro vás opět provede mělkou kopii.