Was sind wilde Zeiger in C und wie können wir sie vermeiden?

Was sind wilde Zeiger in C und wie können wir sie vermeiden?

Was sind wilde Zeiger in C?

Nicht initialisierte Zeiger werden als wilde Zeiger bezeichnet. Das Verhalten nicht initialisierter Zeiger ist undefiniert, da sie auf einen beliebigen Speicherort zeigen. Wilde Zeiger können dazu führen, dass ein Programm abstürzt oder sich schlecht verhält.

Hinweis: Im Allgemeinen warnen Compiler vor dem wilden Zeiger.

int *ptr; //ptr is wild pointer

Sehen Sie sich ein Programm an, um den wilden Zeiger zu verstehen.

#include<stdio.h>

int main()
{
    //ptr pointing some unknown memory location
    int *ptr; /* wild pointer */

    //Assigning value
    *ptr = 12;

    printf("%d\n",*ptr);

    return 0;
}

Ausgabe:

Undefiniertes Verhalten.

Erklärung: In dem erwähnten Programm wird ptr nicht durch gültigen Speicher initialisiert. Es könnte also auf einen unbekannten Ort verweisen, wenn Sie auf den unbekannten Ort zugreifen. Das Programmverhalten ist undefiniert.

Wie können wir wilde Zeiger vermeiden?

Wir können die Erstellung des wilden Zeigers in unserem Programm leicht vermeiden. Wir müssen den Zeiger zum Zeitpunkt der Zeigerdeklaration mit einem gültigen Speicher initialisieren. Sehen Sie sich ein Beispiel-C-Programm an,

#include<stdio.h>

int main()
{
    int data = 27;

    //Now pointer pointing valid memory
    int *ptr = &data; /* no more wild pointer */

    //Assigning value
    *ptr = 12;

    printf("%d\n",*ptr);

    return 0;
}

Ausgabe:

12

Erklärung: ptr zeigt auf Daten, also ist ptr jetzt kein wilder Zeiger.

Wenn Sie keine Variable haben, können Sie Speicherverwaltungsfunktionen (malloc, calloc usw.) verwenden, um einen gültigen Speicher zuzuweisen. Sehen Sie sich ein Beispiel an,

#include<stdio.h>
#include<stdlib.h>

int main()
{
    //Now pointer pointing valid memory
    int *ptr = malloc(sizeof(int)); /* no more wild pointer */

    if(ptr == NULL)
    {
        return -1;
    }
    //Assigning value
    *ptr = 12;

    printf("%d\n",*ptr);

    free(ptr); //free allocated memory

    return 0;
}

Ausgabe;

12

schließlich, wenn Sie dem Zeiger zum Zeitpunkt der Deklaration keinen Speicher zuweisen möchten. Sie müssen den Zeiger mit NULL (Nullzeiger) initialisieren. Das Verhalten des Nullzeigers wird durch den C-Standard definiert und Sie müssen den Zeiger vor seiner Verwendung validieren.

#include<stdio.h>
#include<stdlib.h>

int main()
{

    int *ptr = NULL; /* no more wild pointer */

    if(ptr == NULL)
    {
        ptr = malloc(sizeof(int));
        if(ptr == NULL)
        {
            return -1;
        }
        //Assigning value
        *ptr = 26;

        printf("%d\n",*ptr);

        free(ptr); //free allocated memory
    }

    return 0;
}

Ausgabe;

26

Empfohlene Artikel für Sie:

  • Dangling-, Void-, Null- und Wild-Zeiger
  • Pointer-Interviewfragen in C/C++.
  • Funktionszeiger in c, eine ausführliche Anleitung
  • Wie erstelle ich ein dynamisches Array in C?
  • 15 Häufige Fehler bei der Speicherzuweisung.
  • Wie greife ich auf 2D-Arrays in C zu?
  • Eine kurze Beschreibung des Zeigers in C.
  • Wie verwende ich die Struktur des Funktionszeigers in der Sprache C?
  • 100-C-Interviewfragen, die Ihr Interviewer stellen könnte.
  • Speicherlayout in C.
  • Python-Interviewfragen mit Antwort.
  • Dateiverwaltung in C.
  • Funktionszeiger in Struktur.
  • void pointer in C, Eine Detaildiskussion.
  • Dateiverwaltung in C.
  • C-Formatbezeichner.