Бесконечные циклы в 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