Выделить память под структуру (указатели)

Тема в разделе "WASM.BEGINNERS", создана пользователем ptr, 20 окт 2009.

  1. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    SII
    Это зависит от того, кто распределял память. Т.е. есть ли у rtl ссылка на этот злополучный массив.
    +1. это я и мел ввиду. простите за неточность
    имеется ввиду, что в этой конструкции первое упоминание [element] получает индекс 0, а size остается в отрицательных смещениях. (хотя я и пишу программы на многих языках, но уже отучил себя от постоянного перехода к отсчетам базируемым с 0, как это сделано в сиподобных извращениях, это только сбивает)
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    max7C4
    Транслятор Дельфи предполагает, что память под динамические массивы выделена процедурами RTL. В принципе, можно распределить память и самому, но тогда надо сделать так, чтобы освобождающий её код, сгенерированный транслятором, не вызвал падения приложения -- ну а это требует хорошего понимания, как механизм динамических массивов работает.

    Ну, это-то да, но из Вашего поста я решил, что Вы считаете, что первый элемент массива будет иметь индекс 1 (подобно тому, как первый символ строки имеет индекс 1). Но, вообще говоря, не стоит полагаться на внутреннюю реализацию динамических массивов и строк (в частности, на то, что размер массива хранится в двойном слове по смещению -4), а потому лучше использовать их штатными высокоуровневыми средствами языка, а не забираться в кишки :) Конечно, бывают и исключения, но всё это явно не для начинающих.
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    SII
    Достаточно лишь показать, что память не распределялась. Т.е записать в указатель 0.
    ну тут я могу не согласится т.к. размер смещения зависит от системы. на x86 это может быть как -2, так и -4, а на х64 это может быть -8
    +1. тем более, что когда начинаешь этим заниматься сам может и память потечь, и обратиться к не выделенной памяти, и выйти за размер массива. а тут хоть среда немного следить начинает за всем этим.