У меня есть эта программа, которая хранит много вещей в памяти через указатели на области памяти (структуры, массивы) и этот пользователь, который может запустить программу в любое время. После init программа должна освободить ранее используемую память (если она есть, и это улов) и выделить новое хранилище с возможным разным размером.Свободная память в C: как проверить действительный указатель?
Теперь, начиная с самого первого init, я понятия не имею, на что указывают мои указатели: особенно, я не знаю, являются ли они мусором или нет. Но в случае, если это не так, мне нужно освободить то, на что они указывают. Откуда мне знать?
Вы просто не можете. – George
@George Я так боялся. Идея только что появилась у меня в голове: отделите первый init только с mallocing и no freeing - поскольку система только что началась, и это первый раз и все - от дальнейших действий, которые я буду называть «reinits», и которые будут знать, что они приходят после предыдущего malloc и что они могут освободить то, что стоит за указателями и malloc снова. Stackoverflow иногда дает ответы через вдохновение, а не через других людей ... – Charles
Вы должны делать «бухгалтерию» указателей. Всякий раз, когда что-то больше не нужно, освободите его и установите указатель на нуль. Затем после инициализации все, что не пусто, является допустимым указателем, который должен быть освобожден. –