Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
1 / 1 / 0
Регистрация: 21.09.2025
Сообщений: 32

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

10.10.2025, 09:50. Показов 3007. Ответов 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
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 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
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru