Arhn - архитектура программирования

В чем причина этого нарушения прав доступа при объединении строк в D2007?

У меня есть процедура, которая принимает 2 строковых параметра, один из них имеет значение по умолчанию. Внутри процедуры я хочу объединить один и другой и некоторые литералы, чтобы сформировать одну большую строку. Каким-то образом я получаю AV... есть идеи?

код примерно такой

{$WRITEABLECONST ON}
constructor MyClass.Create(s1: string; s2: string = GlobalConstant);
var s3: string;
begin
    ....
    if (s2 = '') then s2 := GlobalConstant + ' (' + s1 + ')';      // AV here
    ....
end;

Если я назначу GlobalConstant + ' (' + s1 + ') на s3, затем назначу s3 на s2, AV исчезнет. Почему? Что не так с прямой записью в строковый параметр?


  • используя предоставленный вами код, я не могу воспроизвести с d2007. 16.02.2010
  • В этом коде нет ничего плохого. Трудно представить, зачем AV там. Как объявляется GlobalConstant? 16.02.2010
  • @Ник Ходжес. Я знаю, что это объявлено нормально, потому что код работает в другой итерации. Вчера это не удалось на 6-й итерации, сегодня это не удалось на 3-й ... и у меня были AV и в других местах, поэтому я склоняюсь к ответу Пола-Яна. Что-то еще - промах. В любом случае, спасибо, Ник, я ценю это. 16.02.2010
  • Сэм, Ник не спрашивал, было ли это объявлено; он спросил как. Показать больше кода. В частности, покажите место, где вызывается эта функция. Кроме того, относится ли директива $WriteableConst к этому примеру? Этого не должно быть. 16.02.2010
  • @Rob Kennedy, извините, но я не могу показать больше кода. Константа объявляется с помощью самых простых операторов const в модуле, в котором находится MyClass. Директива $WritableConst оказалась в коде, поэтому я решил показать ее, поскольку звучит так, как будто она может иметь значение (я не знал, что это не так). На вопрос ответили. Нет ничего плохого в том, как строки объединяются или назначаются, и AV может появиться здесь из-за плохого кода в другом месте. Я достаточно убежден, теперь мне просто нужно научиться использовать FastMM. Еще раз спасибо, ребята. 17.02.2010

Ответы:


1

Что-то еще в вашем коде неверно, что косвенно приводит к нарушению прав доступа в этом месте (повреждению). Используйте FastMM с FullDebugMode, чтобы выяснить, что это такое и как его решить.

16.02.2010
  • @ Paul-Jan, спасибо, звучит правдоподобно. Я попробую и отчитаюсь завтра. 16.02.2010
  • Я прочитал ту страницу, на которую вы предоставили ссылку, и 2, которые она рекомендует. Я использую FastMM4, включил FullDebugMode (с помощью графического интерфейса FastMM4OptionsInterface), UseDebugDCU, кадры стека, локальные символы, справочную информацию... пересобрал проект и запустил, но я не получаю файл журнала (или, может быть, я не могу найти его!) или любой MessageBoxes. Я все еще получаю AV, но теперь код прерывается внутри функции класса TObject.InheritsFrom(AClass: TClass): Boolean; в WIN32\RTL\SYS\System.pas... :-) Вчера у меня была густая шевелюра, завтра все пропадет! 17.02.2010
  • Ой, забыл создать файл .map! Параметры проекта - Компоновщик - Файл подробной карты. (Да ладно, пожалей новичка.) 17.02.2010
  • Я скачал последнюю версию madExcept, и она прекрасно работает. Я хочу сказать лучше, чем FastMM, но они оба хорошие инструменты, но я нашел madExcept более простым и удобным для пользователя. В любом случае код ссылался на неинициализированный объект. Хотя странно, что AV появлялся в разных местах... Спасибо. 18.02.2010
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..