我用这种方式进行stack操作,在入栈正常,可是peek的时候出现Access
violation这样的错误,难道不能用数组吗var
s: String;
i: Integer;
begin
s := 'abcde';
stack := TStack.Create;
for i := 1 to length(s) do
begin
stack.Push(pointer(s[i]));
end;ShowMessage(String(stack.peek));这样就很正常
var
s: String;
i: Integer;
begin
s := 'abcde';
stack := TStack.Create;
stack.Push(pointer(s));
end;ShowMessage(String(stack.peek));
violation这样的错误,难道不能用数组吗var
s: String;
i: Integer;
begin
s := 'abcde';
stack := TStack.Create;
for i := 1 to length(s) do
begin
stack.Push(pointer(s[i]));
end;ShowMessage(String(stack.peek));这样就很正常
var
s: String;
i: Integer;
begin
s := 'abcde';
stack := TStack.Create;
stack.Push(pointer(s));
end;ShowMessage(String(stack.peek));
解决方案 »
- 放分:讨论delphi的一个新论坛:codegear相关技术论坛
- www.delphibbs.com.cn是不是假的?
- 可以利用COM+来传输文件吗?如果可以,该怎样实现呢?
- 宣传网站 http://www.coderpub.com
- 关于adoconnection重新连接的问题!
- 如何读取SQL数据表字段的description属性值??
- Delphi如何对SQLSERVER 2000中的数据库进行维护(备份和恢复)
- 怎样判断一变量是不是数字组成的?
- 报表里的ONNEEDDATA事件什么时候触发?请说详细一些,急!
- BDE是不是有问题
- 请问,读取IIS站点的全部虚拟路径名称及对应物理路径应该怎么读?
- Dll数据库问题(在线等待,立即给分)
把谁放到栈里面?不是s,而是s每个字符ascii码代表的内存地址。stack.Push(pointer(s));是对的。
var
aStr: string;
pstr: PChar;
i: Integer;
begin
aStr := 'abcdefghij';
for i := 1 to 10 do
begin
pstr := StrNew(PChar(Copy(aStr, i , 1)));
FStack.Push(pstr);
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
FStack := TStack.Create;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
for i := 1 to 10 do
begin
if FStack.Count < 1 then
Break;
ShowMessage(PChar(FStack.Pop));
end;
end;