EXC_BAD_ACCESS «Макросы для Office 2011» Excel Причина отладки MicrosoftOleautomation - PullRequest
0 голосов
/ 05 октября 2011

Я сталкиваюсь с вездесущей ошибкой EXC_BAD_ACCESS в Microsoft Office для Mac 2011 на OSX 10.7 (Lion).Установлено также последнее обновление Office (14,3, я полагаю, это было)

Я запускаю (довольно большой) макрос ... Портирование его из PC Office.

Ошибка возникает при добавленииэлемент в коллекцию.Ничего особенного и делающего это без проблем в других местах.(И не изменял его из рабочей версии ПК).

Итак, хотя это может быть причиной ошибки, я подозреваю, что это связано с памятью коллекции - например, возможно, это делаетrealloc негласно во время этой конкретной вставки.

В частности, он вставляет второй элемент в коллекцию.Нет определенного пользователем типа.Ничего особенного.Добавление строкового элемента.Вставляемые данные являются кошерными.Идентификатор ключа уникален.Использование коллекции хлеба и масла.

Другим возможным подозрением может быть область видимости переменной (???) ... Т.е., это может быть использование переменной с аналогичным именем из другой подпрограммы или что-то дурацкое.

Или, возможно, временная строка, используемая в подпрограмме, является номинальным виновником?

Если я закомментирую эту строку, остальная часть макроса будет работать нормально (за исключением сбоя отсутствующих данных из контейнера.... Который может быть пустым при нормальной работе, поэтому с ним все в порядке)

Я ищу предложения о том, как отследить проблему.И советы по ее решению.

Является ли страница памяти 64k на Mac такой же, как на ПК?

Может ли это быть физическая память / виртуальная память / подкачка?(Кажется, слишком согласованным, чтобы быть связанным с операционной системой)

Возможно, в Excel есть ограничение на ограничение памяти для макросов?

Как я могу использовать дамп ядра для исключения, чтобы отследить проблему?

(Опытный программист, просто незнакомый с OSX ... И скучающий по всем моим инструментам для разработки на ПК вздох )

1 Ответ

0 голосов
/ 16 октября 2011

Разрешено.

Это была не коллекция.

Через некоторую отладку "printf" выследили проблему.Или, по крайней мере, нашел решение.

Ниже приводится несколько предположений о том, что происходит.

Ранее вариантный массив был создан, заполнен и передан подпрограмме ...

Dim nameList(50) As Variant
... populated ...
Call SomeSub(nameList)
...
sub SomeSub(nameList)

В подпрограмме вариантный массив итерировался с использованием цикла «Для каждого» (который аварийно завершился)

For outerLoopIndex=0 To 100

    Dim currName
    For Each currName In nameList
        If testName Like currName Then
            addToBucket = True
            Exit For ' skip any others since found a site of interest
        End If
    Next currName

Next outerLoopIndex

Он работал правильно на первом проходе внешнего цикла.Однако данные повреждаются так, что при втором проходе через внешний цикл происходил сбой EXC_BAD_ACCESS.

«Исправление» заключалось в явном объявлении в качестве варианта:

    Dim currName As Variant
    For Each currName In nameList
        ... 

Возможно, этопоможет другим, сталкивающимся с подобными проблемами.Попробуйте явно объявить переменные.Mac Excel кажется более чувствительным к таким вещам.:)

...