Главная страница
    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.46 MB
Время: 0.011 c
2-1143138221
Vitalik__
2006-03-23 21:23
2006.04.09
запуск файла


2-1143398127
Kolan
2006-03-26 22:35
2006.04.09
Как пользоваться интерфейсом?


2-1143012937
apl
2006-03-22 10:35
2006.04.09
Select - подскажите


15-1142923918
Бугага
2006-03-21 09:51
2006.04.09
RFC заголовок


2-1143021945
Lexa11_2002
2006-03-22 13:05
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский