Бесконечные циклы в C

Я уверен, что этот фрагмент кода дает мне бесконечный цикл (я ушел, если в течение очень долгого времени, и ничего не происходит), и я снимался в этом 2 дня, и у меня нет Понять, почему он продолжает работать. Есть идеи?

    int r = 0;
    int H = 0;
    int g = 0;

    while (r < (3265920)) {

        while (g < 79338) {
            //printf("middle");
            if (!strcmp(arr1[g], Arr2[r])) {

            strcpy(out[H], arr1[g]);
            H++;
        }
            g++;
        }

    r++;
    g = 0;
}

Q=0;
while (Q < 79338) {


    printf("%d: %s\n",Q, Ans[Q]);
    Q++;

}

Все массивы имеют правильное распределение памяти вне основного.

static char arr2[NINE_FACT * 9][10];
char Ans[79339][10];
char arr1[79339][45];

2 ответа

Ваш внутренний цикл выполняется 259111560960 раз, что, вероятно, займет много времени. Для чего используется Н? На 32-битной машине H может вызвать ошибки, потому что она будет переполнена. Обратите внимание, важна длина слова компьютера, на котором вы работаете, т.е. что этот код производит на вашем компьютере?

printf("sizeof(int) == %zu\n", sizeof(int));

Я удивлен, что работает правильно.

out[H]; //This array could be huge.

Если это обычный массив и вы работаете на 64-битной машине, я бы ожидал ошибку сегментации, или иногда это может занять некоторое время Core Dump.

Предполагая, что 32-битный компьютер и одиночные символы в виде строк [H] потребуют 2^31 байт * 2 из-за нулевого терминатора, то есть чуть более 4 ГБ ОЗУ?

Ценность rникогда не будет 3265920, если это 2 байта выделения памяти

либо вы меняете тип данных r to long или изменить состояние r так что это будет в диапазоне int

сначала вы проанализируете диапазон int

Другие вопросы по тегам