Zeiger auf lokale Variable außerhalb des Deklarationsbereichs

Angenommen, ich habe eine Struktur, die ein PDF-Dokument darstelltpdf und eine Struktur, die eine ihrer Seiten darstelltpdf_page:

typedef struct pdf_page {
    int page_no;
    pdf_page *next_page;
    char *content;
} pdf_page;

typedef struct {
    pdf_page *first_page, *last_page;
} pdf;

Von meinemmain(), Ich rufecreate_pdf_file(pdf *doc):

void main() {
  pdf doc;
  create_pdf_file(&doc);
  // reading the linked list of pages here
}

Annehmen, dasscreate_pdf_file ist etwas in diese Richtung:

void
create_pdf_file(pdf *doc) {
    for (int i = 0; i < 10; i++) {
        pdf_page p;
        p.page_no = i;
        p.contents = "Hello, World!";
        doc->last_page->next_page = p;
    }
}

(Dies ist nur ein Beispielquellcode, daher wird keine Listenverarbeitung angezeigtfirst_page undlast_page Mitglieder vonpdf müssen erst eingestellt werden.)

Meine Frage: Wenn ich zugreifedoc->first_page - sowie die anderen Seiten in der verknüpften Liste - nach demcreate_pdf_file() Rufen Sie in meinemmain()ist es möglich, dass ich Segmentierungsfehler erhalte, weil ich die lokale Variable nehmep aus dem Zusammenhang geraten "?

(Ich bin nicht sicher, ob ich garantiert habe, dass der entsprechende Speicherort nicht für etwas anderes verwendet wird.)

Wenn ja, wie vermeide ich das?

Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage