Wskaźnik do zmiennej lokalnej poza zakresem jej deklaracji
Powiedzmy, że mam strukturę reprezentującą dokument PDFpdf
i struktura reprezentująca jedną ze stronpdf_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;
Od mojegomain()
, Dzwonięcreate_pdf_file(pdf *doc)
:
void main() {
pdf doc;
create_pdf_file(&doc);
// reading the linked list of pages here
}
Zakładać, żecreate_pdf_file
jest coś takiego:
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;
}
}
(To jest tylko przykładowy kod źródłowy, więc nie jest pokazane przetwarzanie listy. Oczywiściefirst_page
ilast_page
członkowiepdf
trzeba najpierw ustawić.)
Moje pytanie: Jeśli mam dostępdoc->first_page
- jak również inne strony w połączonej liście - pocreate_pdf_file()
zadzwoń do mniemain()
, czy to możliwe, że otrzymuję błędy segmentacji z powodu „przyjęcia zmiennej lokalnejp
poza jego kontekstem ”?
(Nie jestem pewien, czy zagwarantowałem, że odpowiednia lokalizacja pamięci nie zostanie użyta do czegoś innego.)
Jeśli tak, jak mogę tego uniknąć?
Dzięki.