Главная страница
    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.017 c
2-1143140104
Quattro
2006-03-23 21:55
2006.04.09
ScanLine


2-1143458664
VAZMan
2006-03-27 15:24
2006.04.09
Record


1-1141367824
HITMAN
2006-03-03 09:37
2006.04.09
Счётчик посещения файла страницы


2-1141851911
spogi
2006-03-09 00:05
2006.04.09
Kak uznat kakoy den nedeli, esli znayu kakaya data?


3-1140007823
atruhin
2006-02-15 15:50
2006.04.09
Потеряна информация при сбое питания Firebird





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский