动态数组的指针问题 ( 积分: 100 )

  • 主题发起人 主题发起人 fenghai4690
  • 开始时间 开始时间
F

fenghai4690

Unregistered / Unconfirmed
GUEST, unregistred user!
想要实现的功能:传递一个字符串s给函数crypt(),在crypt中将s转化成array of byte,然后进行异或运算得到加密的array of byte。我要将这个值返回给主函数。
我的实现方法:
type
x=array of byte

pbyte=^x;
...
procedure crypt(str:string;Aa:pbyte);
...

var
pass: pbyte

begin
...
getmem(pass,a)
//a是一个整形变量,已在前面赋值
crypt(s,pass)
//s是一个待加密的字符串
...
end;
procedure crypt(str:string;Aa:ptbyte);
begin
...
getmem(Aa,b);//b是一个整形变量,值等于a;
for i:=0 to b-1 do
Aa^:=passwd
//passwd是一个array of byte,*********程序运行到这里就报错!
...
end;
我想让Aa和pass指向同一块内存,在crypt中给Aa赋值后,在主程序中就可以用pass取出相应的值了。但是执行的时候报错!希望能得到各位的指教!谢谢
 
想要实现的功能:传递一个字符串s给函数crypt(),在crypt中将s转化成array of byte,然后进行异或运算得到加密的array of byte。我要将这个值返回给主函数。
我的实现方法:
type
x=array of byte

pbyte=^x;
...
procedure crypt(str:string;Aa:pbyte);
...

var
pass: pbyte

begin
...
getmem(pass,a)
//a是一个整形变量,已在前面赋值
crypt(s,pass)
//s是一个待加密的字符串
...
end;
procedure crypt(str:string;Aa:ptbyte);
begin
...
getmem(Aa,b);//b是一个整形变量,值等于a;
for i:=0 to b-1 do
Aa^:=passwd
//passwd是一个array of byte,*********程序运行到这里就报错!
...
end;
我想让Aa和pass指向同一块内存,在crypt中给Aa赋值后,在主程序中就可以用pass取出相应的值了。但是执行的时候报错!希望能得到各位的指教!谢谢
 
type
x=array of byte

pbyte=^x;
...
procedure crypt(str:string;var Aa:pbyte)
//这里加上var,ctypt修改Aa就是修改pass了
...

var
pass: pbyte

begin
...
getmem(pass,a)
//a是一个整形变量,已在前面赋值
crypt(s,pass)
//s是一个待加密的字符串
...
end;

procedure crypt(str:string;var Aa:pbyte);
begin
...
getmem(Aa,b);//b是一个整形变量,值等于a;
for i:=0 to b-1 do
Aa^:=passwd
//passwd是一个array of byte,*********程序运行到这里就报错!
...
end;

报什么错???????
 
projiect udpsend.exe raised exception class EAccessViolation with message 'Access violation at address 0047189F in module 'udpsend.exe'.write of address 00000000'...
 
你的passwd是在哪赋值的
试试
for i:=0 to b-1 do
Aa^:='a';
这样会不会报错,如果不报就是passwd的问题
 
procedure crypt(str:string;var Aa:x);
begin
for i:=0 to length(Aa)-1 do
Aa:=passwd
//passwd是一个array of byte,*********程序运行到这里就报错!
...
end;

var
pass: x

begin
...
setlength(pass,a)
//a是一个整形变量,已在前面赋值
crypt(s,pass)
//s是一个待加密的字符串
...
end;
 
还是报错,后来我把
type
x=array of byte

pbyte=^x;
去掉了,用PByteArray替换pbyte就不报错了。
我不明白为什么,呵呵,望指教一下
 
pbyte是delphi的保留字
 
........晕
 
呵呵,原来如此,非常感谢两位!
thank you very much!![:)][:D]
 
??怎么把分都给我了?
 
后退
顶部