Избегайте переполнения в циклах for

Когда проверки целостности памяти включены, если генератор кода обнаруживает, что переменная цикла может переполниться на последней итерации for - цикл, это сообщает об ошибке.

Чтобы избежать этой ошибки, используйте обходные решения, обеспеченные в следующей таблице.

Условия цикла, вызывающие ошибкуРабота вокруг
  • Счетчик цикла постепенно увеличивается 1

  • Значение конца равняется максимальному значению целого типа

  • Цикл не покрывает полный спектр целого типа

Перепишите цикл так, чтобы значение конца не было равно максимальному значению целого типа. Например, замена:

N=intmax('int16')
for k=N-10:N
с:
for k=1:10

  • Счетчик цикла постепенно уменьшается 1

  • Значение конца равняется минимальному значению целого типа

  • Цикл не покрывает полный спектр целого типа

Перепишите цикл так, чтобы значение конца не было равно минимальному значению целого типа. Например, замена:

N=intmin('int32')
for k=N+10:-1:N
с:
for k=10:-1:1

  • Инкременты счетчика цикла или декременты 1

  • Значение запуска равняется минимальному или максимальному значению целого типа

  • Значение конца равняется максимальному или минимальному значению целого типа

Цикл покрывает полный спектр целого типа.

Перепишите цикл, бросив тип счетчика цикла, запускаются, продвигаются, и значения конца к большему целому числу или удвоиться, Например, переписать:

M= intmin('int16');
N= intmax('int16');
for k=M:N
	% Loop body
end
к
M= intmin('int16');
N= intmax('int16');
for k=int32(M):int32(N)
	% Loop body
end

  • Инкременты счетчика цикла или декременты значением не равняются 1

  • На последней итерации цикла значение переменной цикла не равно в конец значение

Примечание

Проверка программной ошибки консервативна. Это может неправильно сообщить о цикле, как являющемся потенциально бесконечным.

Перепишите цикл так, чтобы переменная цикла на последней итерации цикла была равна в конец значение.

Была ли эта тема полезной?