动态记录指针数组问题,请大家多多帮助。(100分)

  • 主题发起人 主题发起人 wyture
  • 开始时间 开始时间
W

wyture

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Delphi6中定义了如下的记录指针数组:
代码:
type
 ; BNSRec = Record
 ;  ; BNIP: String;
 ;  ; BNName: String;
 ; end;
 ; PBNSRec = ^BNSRec;
......
var
 ; RBNS: array of PBNSRec;
......
然后在程序中如不给每个指针分配地址,则无法使用记录;
若给每个指针都分配地址,则程序运行时,在WATCH中看到记录中的元素有不可预知的值,
且不断变化,导致未完成附值程序就报错。
那位前辈若知,请指教。
 
不明白你是想使用静态数组还是链表?
按照你的想法:RBNS: array [1..100] of PBNSRec; 就不会出问题了。
如果使用链表,BNSRec中至少加一个 Next: PBNSRec ,以形成单向链表。
Delphi中提供动态数组VarArray,可以参考 VarArrayCreate 等的帮助,有例子
 
我想使用动态数组以节省资源,并非链表,我会参考你的意见,多谢![8D]
 
你使用动态数组的时候应当分配给他空间,动态数组只不过是个
指针,所以你要分配空间给他,你调用SetLength函数来分配空间
,然后用变量名:=nil来释放空间,也可以用Finalize来释放
 
少用些技巧吧
 
Johnqiu:多谢!
但我的问题是用SetLength给指针数组RBNS分配内存后,因为我还要运行一些代码给每个指针赋值,
如已知j后,
for i:=0 to j-1 do
begin
; ......
; RBNS^.BNIP:=...;
; ......
; RBNS^.BNName:=...;
; ......
end;
在以上过程中先要给RBNS赋值,若不赋值,肯定不能执行,
若赋值,代码还未运行完,RBNS^BNIP与RBNS^.BNName中皆有不可预期的值,且随程序
运行导致的内存变化而变化。[:(]
 
最节省空间的方法应该是 链表。且不使用string类型,
结构用 parked array 定义。

动态数组是 variant 类型,有 Ole 相关,是 OOP 的思想,不会节省资源的...
 
按照你这个应用的话没有必要使用指针呀
type
; BNSRec = Record
; ; BNIP: String;
; ; BNName: String;
; end;
var
; RBNS: array of BNSRec;
就行了。
 
嘿嘿!,真的不用指针吗...?...我要好好再想一想......[?][?][?][?][?][?]
 
应该使用链表!
既然你的已经是指针了,没有必要再做数组。链表很好的!
 
用TList吧。
 
for i:=0 to j-1 do
begin
; new(RBNS); ; ; //加一行
; RBNS^.BNIP:=...;
; ......
; RBNS^.BNName:=...;
; ......
end;
 
创建动态数组后
setlength
然后要初始化
就是给没各字段付一下值就可以的阿。我一直都这样用的
 
这是delphi帮助中的一个例子:
var
; A: Variant;
begin
; A := VarArrayCreate([0, 4], varVariant);
; A[0] := 1;
; A[1] := 1234.5678;
; A[2] := 'Hello world';
; A[3] := True;
; A[4] := VarArrayOf([1, 10, 100, 1000]);
; WriteLn(A[2]); { Hello world }
; WriteLn(A[4][2]); { 100 }
end;

是不是很简单 [:)]
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
706
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部