![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
CynicRus |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 31.5.2012 Репутация: нет Всего: 5 |
Ещё раз приветствую уважаемых форумчан. Преобразовываю массив структур в троку, всё здорово. А вот при попытке присвоить значение этой строки какой либо переменной приводит к Access Violation at 0x0040538c: read of address 0x00000008. При этом строка может быть достаточно большой, но до 2 гигабайт точно не дотягивает.
Собственно код преобразования в строку:
На выходе, в отладчике я вижу что значение присвоилось. Строка длинная. А вот начинаю в тексте программы пытаться присоить значение из этой функции, и получаю вышеизложенно. Работаю в Delphi XE и Delphi XE 3, и в обеих средах получаю такое поведение. Ну и вопрос, собственно - как присвоить значение из этой функции строковой переменной без ошибки. Добавлено через 7 минут и 38 секунд Так...дальнейшая отладка показала, что ошибка происходит при попытке освободить временный массив CorrectData. DataStr - освобождается, а вот CorrectData - видимо ошибка и происходит, когда уничтожается эта локальная переменная. И чего тут делать - пока ума не приложу. |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
А какая необходимость использовать строку?
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
CynicRus |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 31.5.2012 Репутация: нет Всего: 5 |
Совместимость. Хотя я сейчас пробую отказаться от временного массива, и работать с указателем на массив...Но дела идут не очень:)
|
||||
|
|||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Зачем вы динамическому типу string пытаетесь задать длину строки функцией SetLength?
Delphi сама выделит память, если требуется, просто инициализируйте переменную, а потом используйте s:=s+'чего-то там'. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Я вам рекомендую преобразовывать не в строку, а в TStringList, а потом можете спокойно взять TStringList.Text и получите одну строку.
Причём организация будет типа как в обычном блокноте. Приведите более полный код, потому что у меня такое ощущение, что есть лишние операции у вас с указателями. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
-------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
CynicRus |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 31.5.2012 Репутация: нет Всего: 5 |
Потому что bufferstring - PChar. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |