在delphi中结构体指针的问题. .怎么会这样....... (100分)

  • 主题发起人 主题发起人 chshanghai
  • 开始时间 开始时间
C

chshanghai

Unregistered / Unconfirmed
GUEST, unregistred user!
请大家看一下下面的程序
............
type
Pnode=^tree_node;
tree_node=record
lchild:Pnode;
rchild:Pnode;
father:pnode;
data:string;
end;
......................

var
node:pnode;
begin
new(crunode);
// 此时crunode.father 的值应是nil 但结果却不是 为什么????
if crunode.father=nil then
showmessage('c');
end;

希望各位大侠帮忙我一直在线 谢谢....
 
Delphi 6中好象不再支持过程或函数中的静态变量了(用Const声明)
 
不支持也不就该出错啊..(注是delphi 出错而不是编译给的错误提示)

另外我发现下面这名话也是这样
var
operator: array[1..2,1..2] of integer = (2,2,2,2)
也是出现上面的提示

operator :array[1..2,1..2] of integer = ((2,2),(2,2))
就是对的
 
delphi6与以前的版本有些不同.
 
在堆中分配的内存可能不负责清零工作。所以指针不为空
 
我用的是Delphi5,没有问题.

至于
>>另外我发现下面这名话也是这样
>>var
>> operator: array[1..2,1..2] of integer = (2,2,2,2)
>>也是出现上面的提示
>> 但
>> operator :array[1..2,1..2] of integer = ((2,2),(2,2))
>>就是对的
这也许是Delphi对数据类型的定义检查比较严格的缘故.所以第二种写法是对的.
 
我的Delphi5中是nil。

var
operator: array[1..2,1..2] of integer = (2,2,2,2)
本身就不能这样定义的。
 
在delphi 中 new()分配应是清零的吧?????????
是吗?不是吗!
 
我来告诉你事实的真相,
data:string【12】;你的STRING必须给它分配空间才可以,当然不一定是12
 
》var
》 node:pnode;
》begin
》 new(crunode);

crunode从何而来?
---------------------
我的D6代码如下,能够执行showmessage('c');
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


type
Pnode=^tree_node;
tree_node=record
lchild:Pnode;
rchild:Pnode;
father:pnode;
data:string;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
node:pnode;
begin
new(node);
// 我将crunode.father 改成了 node.father
if node.father=nil then
showmessage('c');
end;
end.
 
你最好查找找过程Initialize 的帮助
它是负责清零和初始化的。
如果new负责清零就不会每个人的情况都不一样:
>你
>operator: array[1..2,1..2] of integer = (2,2,2,2)
>也是出现上面的提示

>来自:bluerain, 时间:2002-3-13 10:29:00, ID:979918
>我用的是Delphi5,没有问题.

>来自:教父, 时间:2002-3-13 10:30:00, ID:979923
>我的Delphi5中是nil。

>来自:jrq, 时间:2002-3-13 10:45:00, ID:979976
>我的D6代码如下,能够执行showmessage('c');


 
现在这个问题我已解决
是因为new()不清零
但allocmem() 是清零的
我以前一直用allocmem(), 后来听说说new() 比allocmem安全. 就尝试用new () 但范了一个
根念的错误.
但是因为昨天我写时程序一直都是好的但今天运行时错了..所以我才没有想到new()不清零.

希望大家不要像我这样
to jrq
node 和crunode 是我自已搞错 我在写例子时搞错了不好意思,谢谢
你能过是因为你的机器中堆中的数值正好是零所有能显示多试几次肯定不行
你范的是和一样的错误

to :教父,
你说的我知道, 但是编译器应给出编译不过的信息
而不是本身程序出错
所以我认为是delphi 的Bug

谢谢各位捧场....


 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
814
import
I
I
回复
0
查看
423
import
I
后退
顶部