Вы пишете
это кластеры, которые на самом деле не
существуют, но по какой-то причине до сих пор
печатать
Вы неявно предполагаете, что элемент clusters[i]
не существует, если вы ему не назначены. Но это не правда. Каждое значение в массиве clusters
существует постоянно, независимо от того, назначаете ли вы ему значение или нет. Если вы не присваиваете известное значение, это значение непредсказуемо, возможно, 134634399. Итак, если вы хотите, чтобы все элементы в clusters
были предсказуемыми, что вы должны сделать?
Это неправильное понимание модели памяти C приводит к следующему коду (выдержка из вашего вопроса):
int clusters[50];
/* ... */
for (int i=1; i < 50; i++) {
if (clusters[i] != NULL && clusters[i] != 0)
printf("%d clusters of size %d\n", clusters[i], i);
}
Какова цель теста clusters[i] != NULL
? Вы пытаетесь решить, был ли когда-либо установлен clusters[i]
по циклу, который я пропустил, но тестирование по NULL
не может этого сделать. Элементы clusters
не являются своего рода указателем, они представляют собой необработанные 4-байтовые целочисленные значения. Они всегда имеют какое-то значение, но если вы не установите их для чего-либо, это значение будет непредсказуемым.