说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

关于传递结构中的指针指向的结构的动态数组问题。

编辑:说三道四文库 发布时间:2017-01-24 11:16
HTML文档下载 WORD文档下载 PDF文档下载

Type 
  TResponse = record
    Return : boolean;
    Command : PChar;
    Buffer : pointer;
  end;
  TrtArr = record
    size : integer;
    arr : array of integer;
  end;

function getData() : pointer;
var p : ^TResponse;
    rt : TResponse;
    rtArr : TrtArr;
begin
    rt.Return:=0;
    rt.Command:=nil;
    rt.Buffer:=nil;
    rt.Size:=0;
    rt.Reserve:=0;

    p:=AllocMem(SizeOf(TResponse));
    result:=p;

    .......... //这里的一些过程对rtArr中的size和动态数组进行了赋值。
    //*********将赋值后的rtArr拷贝到rt.Buffer***************
    rt.Buffer := AllocMem(SizeOf(rtArr));
    move(rtArr, rt.Buffer^, SizeOf(rtArr));
    rt.Size := SizeOf(rtArr);  
    //***********************************************
    rt.Return := true;
    rt.Command := 'SUCCEED';
    move(rt, p^, SizeOf(rt)); //将整个rt结构,拷贝到返回结构指针p   
end;

//以下接收返回的结构时出现错误
var data : ^TResponse;
begin
      data := getData();
      rtArr := data.Buffer;
      n := rtArr.size;

      ListBox2.Items.Clear;
      for i:=0 to n-1 do begin
          ListBox2.Items.Add( IntToStr(rtArr.p[i]) );//执行到此处出现内存操作错误的提示
      end;
end;

我试过,如果data.Buffer光是一个数组、字符串、或固定长度的结构的话不会有问题。
但是现在我必须将一个动态数组放入data.Buffer传出去。不知道该如何做。

就相当于一个指针指向一个结构,而这个结构中又有一个指针指向另一个结构,而这另一个结构中有一个元素是动态数组。

Faint!!!
没人回答呀?
我自己已经搞定了,不得不放弃使用动态数组,而改用指针数组。
不过这样一换好像效率提高了,自己也长了不少知识。

使用move进行内存拷贝时最好将目的和源都强制转换pointer型,呵呵。

欢迎继续讨论,别把我的分给糟蹋了。
我看了好久,一个问题是ListBox2.Items.Add( IntToStr(rtArr.p[i]) );
好像你的结构中没有P?第二个问题就是对于动态数组,为什么不用SetLength?
没有p是因为我打错了,把p改成arr就成了,不好意思
我是用SetLength来设置动态数组的长度的,只是此操作与问题没太大关系,所以省略了。
动态数组是delphi中比较特殊的类型,更多的象指针,如果它放在结构中,它始终只占4字节(指针大小),如果是数组的话,则会占用相应大小的字节数,所有两者是有很大区别的.在使用它的高级用法前必须了解其原理
不错
那这样说我就是不能在结构中的指针里使用动态数组了?
可用指针数组来替代有点乱七八糟的感觉。
不是不可以,只是访问它的数据时不能通过结构简单的来完成,举例:
type
  TRec1 = Record
    Arr: Array of Integer;
  end;
  TRec2 = Record
    Arr: Array[0..4] of Integer;
  end;
var
  Rec1: TRec1;
  Rec2: TRec2;
begin
  Rec1.Arr := VarArrayCreate([0,4],varInteger);
  ShowMessage(IntToStr(SizeOf(Rec1)));
  ShowMessage(IntToStr(SizeOf(Rec2)));
end;

你发现结构其实大小完全不一样了吧
另外,如何将一个Pchar拷贝到pointer中

var str : PChar;
    p : pointer;

我是该使用
move(str, p^, StrLen(str));
还是
move(str^, p^, StrLen(str));

另外读p^里的PChar时该怎么做?

已经给分了
test ok
在system单元中查StringToVarArray函数的实现,那里有MOVE的例子
VB如何抓出 Access 的 Table 欄位中的【敘述】部份呢? 实现Access数据库的Web查询-VB资料 使用Visual Basic访问数据库几个注意的问题 数据库查询-VB资料 数据约束控件和 RecordSet-VB资料 锁住数据库中的表 -VB资料 谈谈VB的数据库编程方式 为VB5辩解: VB处理数据库时求数据表记录总数的最佳方法 为什么安装后的数据库应用总是路径不对或找不到? 返回 -VB资料 无论如何,就是只能输入数字-VB资料 VB用 DAO 或 ADO 正确访问 Access 2000 VB用CELL组件显示Access数据库的图片对象 VB用DAO打开Excel文件 VB用DATA控件绑定报表控件打印报表 VB用EXCEL来打印报表并生成折线图 VB用EXCEL组件简化VB编程的一种方法 VB用MDB文件做密码库 VB用ODBC API访问ODBC数据库 用VB 实现类电子表格的数据录入 用VB5直接控制Excel 97 用VBA编制Access的查询程序 用VB和RDO访问SQL Server 用VB开发多通道仪表数据采集程序 用VB实现关闭所有数据库对象 用VB实现类电子表格的数据录入 VB用代码创建数据库,表,字段 VB用类来编写数据库程序 优化OLE的调用频率-VB资料 语言选择引起的查询错误 -VB资料 远程数据库的访问-VB资料 运用ADO进行数据库表数据互导 -VB资料 我将要设计鼠标, 现在缺少有关技术规范的文档, 恳请高人相助, 提供文档和获取文档的途径, 先谢了. 我碰到超难的问题却不会回答,你能帮忙么? 希望这次不会落后 救急:谁有完全版的电子书! WinSetHook拦截消息的问题 最大连接数问题 我问:win *上带的录音机录制的文件会不会过大?有没有小些的东东呀? 甚末情况下多线程程序会导致系统时间变慢? 网页制作 请问:如何在英文98环境下显示中文? 在oracle中基于oci,怎样把"select * from user";中获取的内容显示出来 VB6.0在WIN2K上为什么有问题? to wbill and 51looklook。 请问.doc文档的格式。 网络怎么ping不通? to wbill and 51looklook... 请问高手怎样用API去完成打印机纸张的改变! 请问mp3软件开发高手 应该是一个比较简单的问题吧------但急死我了! 关于人事系统1 还是datawindow取值问题,流芳请进 如何屏蔽SHIFT键? 如何在QuickRep中画线??(SOS) 寻求读串口(RS-232)寄存器状态的dll 谁有ico集和开发用的图片集请email给我,或告诉我那里有download 请教多媒体软件高手 printtext的问题 讨论一下 BCB 有钱途吗 关于SQL数据库恢复问题,请各位DX帮帮忙! 今天又不想灌水 MM让我看这个 http://fe4.bj.163.com/cgi/read?b=bridge&t=4481&i=4481&al=5&n=0&l=20&back=6&guest=1 hehe 高分请教高手:当打包 (packaging) 一个纯 Java 应用时,应该包括那些东东? 谁能告诉我 IBConsole 在哪里?? 哪儿有Formula One 下载? 关于数据库的一个小问题 我也不想灌水 我建了一个CSplitterWnd,包含一个CListView和一个CScrollView,如何在CScrollView的函数中为CListView添加一项,删除一项 誰有 1stclass3000 for delphi6 的注冊碼,小弟先謝了!! 高分请教高手:在 VA Java 中,如果要从工作台 (workbench) 运行一个 bean ,应满足什么条件? 如何用fso,把变量的内容写到指定文本文件最后一行?请快帮忙,急用! 谁有抓图控件 我有电子版的BC++4.0库函数详解,PDF格式,谁要????? 有谁知道怎样用做触发器? 一则sqlserver7数据锁定的问题! delphi如何实现文字纵向打印? 哪位在www.eu.org上注册过免费域名?教教我。 不好意思,怎样在access 2000中做触发器? 超级送分题:给TDBGrid手动添加一行记录 a,b两个表,如何查找a表中的每条纪录是否与b表的某条纪录相同,需要2个游标吗? 请问哪里有提供.org的免费域名吗?.org/yourname的也行。 请问如何得到对方的IP,以后定加分(因为我现在只能一次加21分) 地球离开太阳后的温度如果宇宙中没有了太阳,地球的温度将会是如何的? 地球绕太阳转,太阳绕着月球转,这个说法对吗注意说清楚为什么对(错)。 地球上到底有多少动物 地球与太阳的()使地球有适宜的温度,是形成地球上生命存在的重要内部条件之一 现在哪个明星最红 世界上最强壮的动物是什么动物? 如果突然没了太阳地球的温度会不会下降到“零下”几十或几百度啊?如果第一个问题成立的话请看第二个问题第二个问题是:太阳晚上就到了另一个半球,那为什么正在晚上的那个半球温度 现在最红的明星是谁啊 地球上一共有多少种动物现有的 没有太阳的话地球表面温度会是多少? 天狼星,织女星变成红巨星后,亮度会增加多少 地球上什么动物最大? 地球与太阳的()是地球有适宜的温度 假如太阳变成红巨星,那么人类会怎样 每年大概有多少种动物消失在地球上 阳光的什么和什么造成了地球上不同地区气温不同 当太阳变成红巨星时怎么办? 地球上有多少动物? 地球上的气温不同是由阳光的什么原因引起的 太阳还有多长时间衰变成红巨星 有一种动物曾经是地球上最大的动物,后来在地球上消失了.这是一种什么动物? 太阳的什么与什么造成了地球上不同地区气温的不同 为什么太阳以后会变成红巨星? 地球上曾经出现过的最大的动物是什么是蓝鲸还是恐龙? 阳光的( )和( )造成地球上不同地区气候的不同如题 太阳会演变成红巨星吗? 在地球上已经存在的动物中,哪种最大 根据天体演变的规律,太阳的体积在不断地增大,几十亿年后将变成红巨星,在此过程中太阳对地球的引力?在此过程中太阳和地球的质量不变.其答案是太阳对地球的引力也不变.但我认为,太阳的 谈谈太阳变成红巨星后,我们在哪里 地球上最大的动物是什么 地球对月球引力是太阳队月球摄动力的多少倍A30 B2 C90 D40 太阳变成红巨星之后人类该怎么办? 地球上,最大的动物是什么? 地球质量为6.0*10^24Kg,地球与太阳的距离为1.5*10^11m.地球绕太阳的运动可以看作匀速圆周运动.太阳对地球的引力是多少? 太阳变成红巨星后,水星和金星真的会被吞没吗? 地球最早的有脊动物是什么 核电泄露后对环境有什么影响具体一点的 太阳对地球的吸引力大小要准确的数值 八大行星离太阳较近的四颗行星—— 水星金星地球和火星 被称为八大行星离太阳较近的四颗行星—— 水星 金星 地球 和火星 被称为_____ 远日行星有____ 核电站泄露会影响什么?1986年切尔诺贝利核泄漏都会泄露出哪些放射性物质?已经20年了,现在这些污染物会不会都消失掉?对于钢铁来说,辐射物会留在上面吗?如果会,应该如何去掉这些辐射物呢 太阳对地球的引力大还是月亮对地球的引力大?如果月亮的引力大日食的时候由于引力不平衡地球会不会向月球的方向移动一点? 金星水星地球等8大行星都围绕太阳转所以太阳是宇宙的中心()A可能是B不对C对的 核电站泄露后有什么影响对人类、环境有什么影响? 太阳什么时候毁灭?太阳毁灭时,地球也同时会毁灭吗?那人类应该去哪里呢?新闻上说宇宙中还有一个星球适合人类住,人类可以去那个星球吗?(介绍一下那个星球) 太阳 水星 金星 地球 火星 木星 哪个行星离地球最远 日本核电厂泄露核污染物对环境有何影响? 太阳为什么要变成红巨星?它在吞没地球的时候,那时候的人类或者物种有没有办法从地球转向其他星球呢?我听说美国天文学家说,他们发现了一个类似地球的星,上面也有液态水.假如有液态水, 水星、金星、地球、火星称为______行星? 核电站泄漏有什么后果?对人类有什么影响吗? 是地球绕着太阳转,月亮绕着地球转吗 地球到底是变暖了还是变冷了为什么有的人说地球变冷了 太阳 地球 气温太阳公转还是在向外辐射能量,地球也同时围着他转,四季是怎么产生的,夏季热冬季冷是阳光直射与斜射的原因?太阳光能照射到所以地球表面正对太阳的地方吗?请帮我补充这方 地球、月亮、太阳 分别围着谁转 又被谁被谁围着转 地球究竟是变暖?还是变冷?冰山消融,海水上涨,气温升高,生态破坏……温室效应带来的全球气候变暖恶果已经明白无误地显现在世人面前.气象学家发现,根据过去两年的监测资料,大气中二氧 太阳活动使太阳辐射加强 地球地表温度升高对么? 为什么月亮绕地球转,为什么地球绕太阳转? 地球是变暖还是变冷?本人觉得不可以这样说,几十年相对几十亿年是多少的微不足道啊 地球离太阳越近,地球温度越高?地球离太阳越近,地球的光照面积越大吗?本人认为北半球的面积要比南半球大,因为南半球的陆地比北半球小得多,因此在近日点时地球的光照面积反而小,温度反 月亮是不是围着地球转 地球到底是变暖还是变冷?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn