Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.09;
Скачать: CL | DM;

Вниз

проблема с присваиванием 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
15-1142482194
Little)Lamer
2006-03-16 07:09
2006.04.09
что о этом думаете?(виртуальный вуз по компам)


5-1129100926
MegaVolt
2005-10-12 11:08
2006.04.09
Виртуальная канва. Как реализовать?


2-1143022002
nub
2006-03-22 13:06
2006.04.09
Форматирование кода в Delphi


15-1142621675
olevacho_
2006-03-17 21:54
2006.04.09
Посоветуйте компонеты для построения отчетов


2-1143487831
EHOT
2006-03-27 23:30
2006.04.09
Ждущий режим