1 / 1 / 0
Регистрация: 21.09.2025
Сообщений: 32

Возможен ли "мусор" в managed типах?

10.10.2025, 09:50. Показов 3013. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую,
Вопрос в заголовке, и он сложный. Если сформулировать простыми словами, то managed типы - это String, Динамический Массив(и т.п.), а "мусор" - это случайные, неинициализированные данные.
Например, если обычные типы Integer, ShortString, Pointer, Double(и т.п.) объявлены как локальные переменные(на стеке), то они сразу содержат "мусор".
А вопрос темы, могут ли managed типы содержать "мусор"?

Цитата Сообщение от Quinn67 Посмотреть сообщение
А вопрос темы, могут ли managed типы содержать "мусор"?
мои предварительные тесты показывают, что Куча и New() всегда инициализируется нулями, поэтому "мусор" если искать, то в стеке. Бытовых примеров пока не придумать, лишь экстримальные - объявить managed тип как поле в record, а указатель на этот record инициализировать через GetMem(), который выделяет блок с мусором
Нужна помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2025, 09:50
Ответы с готовыми решениями:

Как исправить "Warning: Local variable "s" of a managed type does not seem to be initialized"
main.pas(13,9) Warning: Local variable "s" of a managed type does not seem to be initialized ...

Запутался в типах переменных..найдите ошибку
Вчера начал изучать Delphi ,решил написать прогу для счета дискриминанты..запутался в типах...

Время и строка не совмещаются(ошибка в типах, помогите)
procedure TForm2.Timer1Timer(Sender: TObject); var _music: Boolean; i1 : String; lol,i:...

30
1 / 1 / 0
Регистрация: 21.09.2025
Сообщений: 32
10.10.2025, 13:25  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Verevkin Посмотреть сообщение
С чего ты это взял?
видел в C++ удобные online сервисы, прямо в бразере компилируют консольные программы под любую версию языка.
Может и в Delphi такое есть?
Цитата Сообщение от AzAtom Посмотреть сообщение
???
из листинга см.выше:
pdw[0] 32313020 - это первые 4 байта строки s
Delphi
1
s := ' 012 Test string';
отсюда предположение, что в Delphi7 нет смысла хранить размер элемента(Char), т.к. он =1 байт.
Но, в Delphi 2009+ появились юникодные строки и там может понадобиться размер элемента(Char)
Повторюсь, предположение...
0
Злостный нарушитель
 Аватар для Verevkin
10883 / 5822 / 1288
Регистрация: 12.03.2015
Сообщений: 26,874
10.10.2025, 13:27
Цитата Сообщение от Quinn67 Посмотреть сообщение
Но, в Delphi 2009+ появились юникодные строки и там может понадобиться размер элемента(Char)
начиная с 2009, размер Char равен 2 байта. Его также нет смысла нигде хранить.
Unicode в 2009+ - это не юникод кодировок utf-8, utf-16...
0
Злостный нарушитель
 Аватар для Verevkin
10883 / 5822 / 1288
Регистрация: 12.03.2015
Сообщений: 26,874
10.10.2025, 13:58
Цитата Сообщение от Quinn67 Посмотреть сообщение
видел в C++ удобные online сервисы, прямо в бразере компилируют консольные программы под любую версию языка.
Может и в Delphi такое есть?
Есть для FreePascal (в том числе). Устроит?

1
Злостный нарушитель
 Аватар для Verevkin
10883 / 5822 / 1288
Регистрация: 12.03.2015
Сообщений: 26,874
10.10.2025, 14:15
Нашёл исчо вот такую приблуду, но у ней проблемы с кириллицей (наверное, санкции ).

1
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
10.10.2025, 14:56
Цитата Сообщение от Verevkin Посмотреть сообщение
Это legacy турбопаскаля и ShortString
Так у меня "a" это не string, потому и "???".

Добавлено через 3 минуты
Цитата Сообщение от Quinn67 Посмотреть сообщение
вероятно, a[0] размер элемента - это из других Delphi.
Цитата Сообщение от Quinn67 Посмотреть сообщение
пытался разобрать ваш пример, отсюда:
Цитата Сообщение от AzAtom Посмотреть сообщение
a[0] - первый (нулевой по индексу) элемент массива, количество байт соответствует размеру элемента.
и т.д.
Нет, это нулевой элемент массива. Размер самого элемента в байтах в массиве не указывается. Я пишу про то, что размер этого элемента будет такой, как задан при объявлении массива. Это регулирует и учитывает компилятор на этапе компиляции.
0
Злостный нарушитель
 Аватар для Verevkin
10883 / 5822 / 1288
Регистрация: 12.03.2015
Сообщений: 26,874
10.10.2025, 14:57
Цитата Сообщение от AzAtom Посмотреть сообщение
Так у меня "a" это не string, потому и "???".
Да забей, пятница сёдня, ну скока можна? Пойдём уже пиво пить!
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
10.10.2025, 15:00
Цитата Сообщение от Quinn67 Посмотреть сообщение
Но, в Delphi 2009+ появились юникодные строки и там может понадобиться размер элемента(Char)
Нет, не может. Задан Char - размер 2 байта. Задан AnsiChar - размер 1 байт. Это всё учитывается компилятором во время компиляции.

Добавлено через 2 минуты
Шла вторая страница обсуждения, но так и не было понятно, откуда появился этот вопрос (практическое применение) и в чём нужна помощь?
0
1 / 1 / 0
Регистрация: 21.09.2025
Сообщений: 32
10.10.2025, 16:08  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Нет, не может. Задан Char - размер 2 байта. Задан AnsiChar - размер 1 байт. Это всё учитывается компилятором во время компиляции.
Тогда не понятно, что за "размер элемента" a[0] в вашем листинге:
Цитата Сообщение от AzAtom Посмотреть сообщение
a[0] - первый (нулевой по индексу) элемент массива, количество байт соответствует размеру элемента. и т.д.
Мое предположение, что это:
Цитата Сообщение от Quinn67 Посмотреть сообщение
в Delphi 2009+ появились юникодные строки и там может понадобиться размер элемента(Char)
Повторюсь, предположение...
увы, оказалось ошибочным. Вот структура StrRec из файла system.pas, elemSize имеет длину 2 байта(не 4) и идет до refCnt
Delphi
1
2
3
4
5
6
7
8
9
StrRec = packed record
{$IF defined(CPUX64)}
  _Padding: LongInt; // Выравнивание до 16 байт
{$IFEND}
  codePage: Word;
  elemSize: Word;
  refCnt: LongInt;
  length: LongInt;
end;
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
10.10.2025, 16:14
Цитата Сообщение от Quinn67 Посмотреть сообщение
Тогда не понятно, что за "размер элемента" a[0] в вашем листинге:
Размер элемента массива. Если это array of byte, то будут размером 1 байт, что наглядно видно в выводе программы - pdw рассматривается, как массив dword и выводит по 4 байта, а там содержится все 4 элемента массива типа byte.

Добавлено через 1 минуту
Цитата Сообщение от Quinn67 Посмотреть сообщение
elemSize имеет длину 2 байта(не 4)
Это не тот размер. 2 байта это размер до 65535 байт может иметь размер один элемент. С большим запасом.
0
1 / 1 / 0
Регистрация: 21.09.2025
Сообщений: 32
12.10.2025, 14:38  [ТС]
Цитата Сообщение от Quinn67 Посмотреть сообщение
А вопрос темы, могут ли managed типы содержать "мусор"?
Похожая тема обсуждалась, не помню где, в интернете или здесь на форуме. Там написали пример, как в строке(managed тип) оказывается мусор. Причем, бытовой пример из жизни, не экстремальный ...
Жаль, не могу найти, или придумать подобный пример.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
12.10.2025, 15:16
Delphi
1
var s: string[n];
Вот здесь точно изначально содержится мусор. Только такая строка не то же самое, что и просто string и не является managed в том же смысле, что и просто string.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2025, 15:16

Ошибка в типах данных
Здравствуйте. Помогите пожалуйста исправить ошибки в коде var p,it,a,m,b:integer; Procedure...

Сравнить в правильных типах
Есть функция: function LastInput: DWord; var LInput: TLastInputInfo; begin ...

Не совсем понимаю, что нужно объявлять в типах?
Там прописывается все действующие элементы интерфейса моего приложения так?

Ошибка в типах данных extended и string
Делаю программку на подобии теста, необходимо считывать тексты из нескольких Edit'ов и если они...

Запутался в типах
Есть функция: function CalcFunc(x:Extended):Extended; begin CalcFunc:=(-(pt.mrs+pt.mrs*x))...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru