Natrafiłem na to przez sieć, podczas gdy studiowałem pewne rzeczy związane z wyciekiem pamięci.co to jest "odniesienie do zawieszenia" i "ogólny błąd ochrony"?
int* Function()
{
int arrays[10];
/* Some code here */
return &(arrays[0]);
}
Autor mówi, że powyższy fragment kodu jest poprawny, ale pamięć, która jest zwracana zostaną ponownie wykorzystane przez następną funkcję oddzwonienia, tak samo pamięci ma być używana w dwóch celach. Nazywa się to "odniesieniem do powieszenia" i może powodować straszliwe przerywane błędy lub staroświecki "ogólny błąd ochrony".
Byłoby wspaniale, jeśli ktoś może wyjaśnić, co „wisi odniesienie” & „Ogólny błąd ochrony”
Autor nie bardzo dobrze zna C, lub źle ją reprezentujesz. Program ma niezdefiniowane zachowanie. –
To nie dokładnie przecieka pamięć, ponieważ przydzielona tablica zostanie automatycznie zwolniona po powrocie funkcji. Jest to, co rozumie się przez wiszące odwołanie, zwracasz wskaźnik do pamięci przydzielonej na stosie.Gdy funkcja zwraca, tablica alokowana w stos jest deallokowana, dzięki czemu lokalizacja w pamięci może zostać nadpisana przez dane dla następnego wywołania funkcji, więc odwołanie do zwracanego wskaźnika da nieokreśloną wartość. –
Yup wygląda jak Wiszący oznacza odwołanie się do czegoś na stosie, który już nie istnieje. Jakieś pojęcie o "ogólnym błędzie ochrony"? –