Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

проблема с присваиванием stringToPointer и StringToArray   Найти похожие ветки 

 
Georgiy   (2006-03-27 01:11) [0]

var
Buffer:pointer;
BufSize:dword;

studio:string;
t:array [0...250] of char;

BufSize:=length(studio);
GetMem(Buffer,BufSize);
Buffer:=studio+char[0]; // ???pointer and string

t:="Welcome"; // ok!
t:=t+" "+studio; // ????

попытка через бубен
1
Buffer:=@studio;

2
for a:=0 to length(studio) do begin
chr1:=copy(studio,a,1);
chrReal:=chr[1];
t[a+7]:=chrReal;
.....
вызывало ошибку в программе(


 
Zeqfreed ©   (2006-03-27 01:39) [1]

А чего вы, собственно, добиваетесь? Чтобы память по Buffer хранила в себе содержимое строки? См. Move, а под конструкцией char[0] видимо имелось в виду #0, т.е. символ с кодом 0?


 
unknown ©   (2006-03-27 01:41) [2]

Зачем это t:array [0...250] of char; ? Можно просто ShortString или string[250]


 
Fay ©   (2006-03-27 01:50) [3]

2 Georgiy   (27.03.06 1:11)
> BufSize:=length(studio);
> GetMem(Buffer,BufSize);
Из кода не следует, что переменная studio проинициализирована

> Buffer:=studio+char[0];
Не думаю, что это можно скомпиллировать.
Для таких случаев есть StrPCopy (кажется). Или Move.
Но, в любом случае, Памяти выделенно на 1 байт меньше, чем нужно.

> попытка через бубен
> Buffer:=@studio;
Это ещё зачем?! Ты же не думаешь, что так получишь указатель на первый символ строки?
Тогда уж
Buffer := PChar(studio);
или
Buffer := Pointer(studio); // Если studio = "", то вернёт nil

> for a:=0 to length(studio) do begin
Это ваше трындец!

> вызывало ошибку в программе(
Неужели "Обнаружено влияние космических лучей!" ?


 
Georgiy   (2006-03-27 10:08) [4]

>Зачем это t:array [0...250] of char; ? Можно просто ShortString или string[250]

в procedure используется такой тип,и стоит t:="Welcome";
статическое присваивание,хочу добавить свое t:=t+" "+studio; ,но
array <>string

>Чтобы память по Buffer хранила в себе содержимое строки?
ДА!

новый код


procedure SaveDBLog(Value:string);
var
Buffer:pointer;
BufSize:dword;
begin
BufSize:=length(Value);
GetMem(Buffer,BufSize);
Buffer:=PCHAR(Value);
......использую
FreeMem(Buffer);
end;


действие делается,но валит программу с ошибкой
Runtime 204

изменив на

BufSize:=length(Value)+1;
GetMem(Buffer,BufSize);
Buffer:=PCHAR(Value+chr(0));
......использую
FreeMem(Buffer);


вызывает программа вызвала ошибку и будет закрыто(

Но всетаки работает ,Buffer пишется на диск,
SaveDBLog("test write") и в логе есть эта строка
Анализ показал,что если убрать FreeMem(Buffer);,то
ошибки нет,но строка не пишется,не пойму как это может быть


 
ЮЮ ©   (2006-03-27 10:13) [5]

GetMem(Buffer,BufSize);  // выделил память
Buffer:=PCHAR(Value); // указатель на выделенную память потерял, установил совсем в другое место памяти, куда, что писать, что освобождать - получишь AV


 
Amoeba ©   (2006-03-27 10:50) [6]

Рекомендую автору вопроса ознакомиться с этой статьей:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1206



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.014 c
15-1142950445
Сатир
2006-03-21 17:14
2006.04.09
MS SQL Server


6-1135589718
syned
2005-12-26 12:35
2006.04.09
WinSock приходят неверные данные


2-1143303978
XiAndr
2006-03-25 19:26
2006.04.09
Новые страницы в TWebBrowser


2-1143520222
Rubey
2006-03-28 08:30
2006.04.09
Многостраничная печать


4-1137772468
Compton's G
2006-01-20 18:54
2006.04.09
Обои на рабочем столе.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский