Как вы защищаете свои приложения от переполнения буфера? - C#
Формулировка задачи:
Как вы защищаете свои приложения от переполнения буфера? Нужно ли для этого усложнять код?
Решение задачи: «Как вы защищаете свои приложения от переполнения буфера?»
textual
Листинг программы
/// <summary>
/// Безмятежный массив, которому пофиг на выход за границы.
/// </summary>
// TODO: Реализовать IEnumerable<T>, ICollection<T> и тд
public class SerenityArray<T> where T: class
{
struct Errno
{
public T LastValue { set; get; }
public int LastIndex { set; get; }
}
private T[] _Data;
public Errno LastIndexError { set; get; }
public int Capacity { private set; get; }
public T this[int index] {
set {
if (index < 0 || index >= Capacity) {
LastIndexError = new Errno { LastValue = value, LastIndex = index };
return;
}
_Data[index] = value;
}
get {
if (index < 0 || index >= Capacity) {
LastIndexError = new Errno { LastValue = value, LastIndex = index };
// Будьте внимательны! Если забыть проверить LastIndexError
// в вызывающем коде это может привести к трудноуловимым ошибкам!
return null;
}
return _Data[index];
}
}
public SerenityArray<T>(int capacity) {
// TODO: Проверка параметра capacity
_Data = new T[capacity];
Capacity = capacity;
}
}