Давайте примем список со структурой
А-> B-> C-> D
, Если бы Вы только имели указатель на B и хотели удалить его, Вы могли бы сделать что-то как
tempList = B->next;
*B = *tempList;
free(tempList);
, список будет тогда похож
А-> B-> D
, но B содержал бы старое содержание C, эффективно удаляя то, что было в B. Это не будет работать, если некоторая другая часть кода будет содержать указатель на C. Это также не будет работать, если Вы пытались удалить узел D. Если Вы захотите сделать этот вид операции, необходимо будет создать список с фиктивным узлом хвоста, это действительно не используется так, Вы гарантируете, что никакой полезный узел не будет иметь ПУСТОЙ прямой указатель. Это также работает лучше на списки, где объем данных, сохраненный в узле, является небольшим. Структура как
struct List { struct List *next; MyData *data; };
была бы в порядке, но тот, где это
struct HeavyList { struct HeavyList *next; char data[8192]; };
, был бы немного обременителен.
Мы слышали об этой ошибке на некоторых MacBook, но мы не можем ее воспроизвести.
Не могли бы вы попробовать этот трюк, некоторые люди сообщили, что это решает проблему для них (недавно мы добавил это на нашу http://monotouch.net/Documentation/Troubleshoot страницу):
Иногда редактор исходного кода MonoDevelop работает очень медленно, кажется, зависает на несколько секунд между вводом символов.
Это проблема возникает очень редко и ее чрезвычайно трудно воспроизвести - обычно ее невозможно воспроизвести на том же компьютере после перезапуска MonoDevelop. По этой причине мы были бы признательны, если бы вы могли выполнить несколько шагов отладки перед перезапуском MonoDevelop и отправить нам результаты.
Пожалуйста, прикрепите журнал MD, ~ /.