Форум: "Начинающим";
Текущий архив: 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