Pointer problem
Efter at have skiftet fra Borland C++ 5.02 til Builder 6.0 virker følgende ikke længere:// I .h fil:
struct NavHistoryStruct {
LONG lFormat;
struct NavHistoryStruct *pPrevious;
struct NavHistoryStruct *pNext;
};
typedef struct NavHistoryStruct * PNavHistory;
// I .c program:
VOID NavHistoryPush(LONG lFormat) {
PNavHistory pNav;
if(!(pNavHistory)) {
pNav = (struct PNavHistory *)malloc(sizeof(PNavHistory));
pNav->pNext = NULL;
}
else if(pNavHistory->pNext == NULL) {
pNav = (struct PNavHistory *)malloc(sizeof(PNavHistory));
pNav->pNext = NULL;
pNavHistory->pNext = pNav;
}
else pNav = (pNavHistory->pNext);
pNav->lFormat = lFormat;
pNav->pPrevious = pNavHistory;
pNavHistory = pNav;
bNavCallback = FALSE;
NavUpdButtons();
}
Første gang metoden kaldes går det godt, vi kommer ind i den første if. Anden gang burde vi komme ind i else if'en, men det gør vi ikke, hvilket indikerer at pNavHistory->pNext ikke er NULL. Men hvorfor??
Herefter crasher programmet med memory allocation error ved pNav->lFormat = lFormat; da pNav ikke indeholder noget fornuftigt.