Когда вы просматриваете q[i].addr
, еще не было выделено памяти для q[i].addr
. Теперь все может произойти, потому что строка помещается в память, которая не принадлежит вам.
Вам также следует проверить возвращаемое значение fscanf, чтобы убедиться, что данные были правильно прочитаны.
Кажется, что использование шаблона Итератора в настоящее время является лучшим способом в AS3 для передачи набора вокруг системы при гарантии, что это не будет изменено.
Интерфейс IIterator, который я использую, смоделирован на Итераторе Java, но я не реализую удаление () метод, поскольку это считают ошибкой дизайна многие в сообществе Java, из-за него разрешающий пользователю удалить элементы массива. Ниже мой IIterator implemention:
public interface IIterator
{
function get hasNext():Boolean
function next():*
}
Это затем реализовано классами, такими как ArrayIterator, VectorIterator и т.д.
Для удобства я также расширяю Прокси на своих конкретных классах Итератора и оказываю поддержку для циклов foreach в AS3 путем переопределения nextNameIndex () и nextValue () методы. Это означает код, который обычно использовал Массивы, не должен изменяться при использовании моего IIterator.
var array:Array = ["one", "two", "three"]
for each (var eachNumber:String in array)
{
trace(eachNumber)
}
var iterator:IIterator = new ArrayIterator(array)
for each (var eachNumber:String in iterator)
{
trace(eachNumber)
}
Только проблема... нет никакого способа для пользователя посмотреть на интерфейс IIterator и знать, что они могут использовать цикл foreach для итерации по набору. Они должны были бы посмотреть на реализацию ArrayIterator для наблюдения этого.
Некоторые утверждали бы, что то, что можно реализовать такие шаблоны как библиотеки, является аргументом против добавления опций на сам язык (например, разработчики языка C++ обычно говорят это).
У Вас есть неизменность, которую Вы хотите через объект прокси или нет? Отметьте, Вы можете сделать, чтобы конструктор VectorIterator взял обязательный параметр Класса. По общему признанию это не разработчик, дружелюбный в данный момент, но позволяет вещам надежды, улучшится в будущем.
I создали небольшую библиотеку неизменяемых классов коллекций для AS3, включая типизированный упорядоченный список, который звучит так, как будто он отвечает вашим потребностям. Подробнее см. в этом сообщении в блоге .