Прежде всего, никогда не используйте
x = realloc(x, size);
, потому что, если x
выделено раньше и realloc
не удается, вы делаете его NULL
, пока память еще есть, и поэтому вы создаете мусор.
Во-вторых,
void freeTouch(Touch *f);
получает указатель по значению и поэтому не может изменить сам указатель.Так что ваш f = NULL;
не эффективен.Вам нужно изменить свой код на:
int main(){
Touch *myTouch = NULL, temp;
int inputCounter = 0;
//whenever a touch is recognized:
...
temp = realloc(myTouch,sizeof(*temp) * (inputCounter++));
if (temp == NULL)
/* handle error */
myTouch = temp;
...
// everything works fine until:
freeTouch(&myTouch);
}
void freeTouch(Touch **f){
if(f != NULL && *f != NULL){
free(*f);
*f = NULL;
}
}
Sidenote: Это хорошая идея использовать realloc
(а также malloc
), например:
x = realloc(count * sizeof(*x));
Нетнужно наложить вывод или realloc
.Кроме того, sizeof(*x)
позволяет вам не повторять тип x
каждый раз.