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

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

编辑:说三道四文库 发布时间:2017-04-26 10:17
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中显示动画鼠标图标 在VB中用PictureClip控件实现动画 在Visual Basic 6.0中实现自动播放VCD VB怎样在VB中播放Flash动画。 VB制作TopMost窗口 VB制作带有动画和声音的屏幕保护程序 VB制作自己的MP3播放器 用VB实现鼠标的隐藏 0、""(空字串)、Null、Empty、与 Nothing 的区别 -VB资料 VB中获取逻辑磁盘的信息 Command & Conquer 文件格式-VB资料 CrystaIReports for VB5报表编程经验 DirectX揭密-VB资料 HOOKS 说明书-VB资料 kb_event函数的使用 -VB资料 MaskEdit 中 9 的问题 -VB资料 MDB文件的导出(使用DAO)-VB资料 PaintPicture的和法 -VB资料 Shell & Wait 的程序怎么写? -VB资料 SHELL语句用法心得-VB资料 VarPtr、StrPtr和ObjPtr函数的用法-VB资料 VB 在ACADWIN中的使用 VB5.0应用程序的启动与退出设计 VB5如何取得CDROM的盘符? VB5三十六计 VB5中确定CPU类型 Vb6.0编程技巧四则 VB6二进制双通道技术实战经典 VB6内置的内码转换功能 VB编程步步高-代码效率篇(一) VB编程步步高-杂类篇(二) 一个新手问题,在线等待,多谢帮助! Install shield怎么把不同的5组文件安装到不同目录下? 如何让系统每隔一段时间向数据库中写一次数据 Install shield怎么把不同的5组文件安装到不同目录下? 请问怎样在REALPLAYER 中截一幅图 如何用代码创建一个adodc SOCKET的revc()的问题 请问哪里有c#语法的速查手册,最好有与vb的对照版? 一个随机数的问题----请多帮忙 我在win2000 professional 想装sql server 2000 的服务器版,为什么装不上,说我只能装client端 那位大侠肯解答小女子的一个小问题! 要改basic老程序,帮忙看看!!!!在线等!解决就马上给分!!! DataSet赋值问题 找ICPC真题的参考答案和测试数据 紧急求助,请大虾救命! 各位大虾,救命啊,初学者请教了,不救我就完了 很少遇到用户有这样要求的,请做过的高手回答一下 有谁知道jbuiler 6与weblogic 7之间如何结合呀? 指教指教~~~~~~~~~~~~``````````谢谢 哪位大虾有WAVE—>MP3的压缩算法(有多个WAVE文件需要同时压缩) 毕业论文答辩,在session中传递矢量的利弊 真的没有人愿意帮我吗???!!! 高分------如何获取主窗口外的鼠标坐标点 并能控制鼠标到指定的坐标? 真的没有人愿意帮我吗??! 这个怎么修改? 论文问题 急盼你的回答 如何在modal窗口中单击生成一个非modal的窗口 急聘程序员(北京,新世纪饭店写字楼) 毕业设计问题 为何在VB中,EXIT SUB 不能结束过程 技术资料查询 怎样把开机时 操作系统选择菜单去掉? 微调按钮与编辑控件使用的问题? 鞍山的程序员,进来说说你们的情况!! 哪里有关于Delphi技术MIDAS和ADO的详细的文章?急!! 请问在servlet中getServletConfig()方法怎么就得了一个ServletConfig对象了呢? 送分,一个简单的翻译 有谁在linux下成功安装了内猫驱动啊? 聊天室刷新最好实现办法是什么?等待中。。。。。。 排序的问题! 如何用程式来修改默认打印机的设置? 一个电话本留言程序 帮我评价一下我用HTML写的网站 *********谁能解释一下软件开发中的C/S和B/S结构呀?!?!*********** 上机考试~~``:( 这个sql语句怎么写,多谢了 深圳程序员考试什么时候报名?在哪报? 如何指定MIDI播放设备? 窗口的简单问题~~~ 如何分发delphi三层应用系统?给100,谢谢 液体温度计内的液体不行用水的原因是 线经与功率怎么算 旋风分离器的临界粒径是指能完全分离出来的什么粒径. 为什么水不能做温度计里的液体 C+CO2=可逆=2CO 怎么判断反应平衡C+CO2==2CO 怎么判断反应平衡 A v(co2)=v(co) B容器中总压强不变 C容器中混合气体的密度不变 D 容器中CO的体积分数不变 两个同样型号旋风分离器并联,分离效果会增加吗?题中没有说处理气体流量变化 托里拆利实验换粗的玻璃管水银柱还是76厘米? 在地球表面某一处附近,同一物体的重力大小恒定?正确还是错误?为什么 难道不能近似吗。。 C+CO2=2CO这个可逆反应加大压强后,平衡怎么移动? 关于吸附沉淀和过滤的3个化学问题为什么过滤的效果会比吸附沉淀好呢?用活性炭吸附是不是属于吸附沉淀呢?吸附沉淀在自来水净水过程中,是否属于反应沉淀呢? 物体的重力是否是恒定的? 100KW的功率要用多大的线 在一定条件下,合成氨反应达到平衡后混合气体中NH3的体积分数为25%在一定条件下,将一定量的N2和H2混合气体合成氨,达平衡时,混合气体中NH3的体积分数为25%,若反应前后条件相同,则反应从开始 问一道酸碱盐化学题:某化学课外活动小组到硫酸厂参观,发现生产硫酸的车间内有许多金属管道,经询问工厂技术人员得知,该金属管道是用来输送硫酸的.(1)请你对制成该金属管道的金属 同温同压下,A容器中的H2和B容器中的NH3所含的氢原子数相等,则两个容器的体积比是? 在5L密闭容器中,通入5molN2和8molH2,在一定条件下生成NH3,反应进行到2min时,测得容器内有4molNH3.求:(1) 两分钟时,容器内n(N2)=_____ C(H2)=_________(2) 两分钟内,以N2表示的平韵反应速率V(N2)=_______(3)两分 葡萄牙,西班牙,法国南部都是什么气候类型急用啊 三相功率100kw距离30M要多大的铜芯线? 一定温度下在容器为5L的密闭容器中,通入5molN2和8molH2,在一定条件下反应生成NH3反应进行到2min时,测得容器内有4molNH3.求(1)2min内,H2的平均反应速率(2)2min时,N2的转化率(3)2min时,求容器内气体的 我国南北跨纬度50度,那有几个温度带呢? 已知:C(s)+CO2(g)2CO(g) △H>0.该反应达到平衡后,下列条件有利于反应向正方向进行的是 ( )已知:C(s)+CO2(g)2CO(g) △H>0.该反应达到平衡后,下列条件有利于反应向正方向 在一定条件下,进入氨合成塔的混合气体中含N2的体积分数为22%,含H2体积分数为78%,经过合成反应达到平衡后,在相同的温度和压强下,气体的体积缩小至原体积的95%.则N2的转化率最接近[ ]A.12 为什么镁粉在军事上常常用于制作照明弹 白磷在军事上常常用于制作烟幕弹 一定条件下,可逆反应C(s) + CO2(g)=2CO(g);△H>0,达到平衡状态,现进行如下操作①升高反应体系的②增加反应物C的用量; ③缩小反应体系的体积; ④减少体系中CO的量.上述措施中一定能使反 在容积为5L的密闭容器中通入20molN2和60molH2,在一定条件下进行反映,2min后达到平衡,计算平衡时NH3的体积分数,和平衡时容器内气体压强与反应开始时气体压强的比值平衡时NH3的浓度为2mol/l 镁粉和硫酸镁粉有什么不同?制作照明弹一定得用镁粉吗?氯酸钾能用火柴头代替吗? 为什么托里拆利实验中,玻璃管倾斜,但竖直高度不变?由于p=F/S,F不变,但倾斜之后,底面积增大了,为什么还是不变?应该增大的吧? 已知2 NH3(g)+CO2=NH2COONH4(l)不能判断该反应一定大道化学平衡的是:A容器中的气体的平均相对分子质量不随时间而变化B:氨气的正反应速率等于2倍的二氧化碳反应速率C:恒容容器的气体密度不 葡萄牙天气温度状况如何? 禁止使用含磷洗衣粉 是否合理? 在一顶条件下合成氨反映达到平衡后混合气体NH3的体积分数为0.25若反映前后条件不边则反映后缩小的气体体积与原反映物体积的比值是?A0.2 B0.25 C0.33 D0.5 在相同条件下A容器中的H2和B容器中的NH3所含的原子总数相等,这辆个容器的体积比是多少? 使用含磷洗衣粉有什么坏处?使用含磷洗衣粉对大自然和人类有什么害处? 相同质量的下列气体所含原子数最多的是 C2H6 N2 CO O2中的哪个 在同温同压下,A容器中盛有H2,B容器中盛有NH3,若它们所含的原子总数相等,则这两个容器的容积之比是要分析的 为什么不用含磷洗衣粉 急 HCN与NaOH反应热为什么大于中和热?Hcn电离吸热还放热啊啊啊啊啊啊啊啊啊啊啊啊 同温同压下,A容器中H2和B容器中NH3所含原子数相等,则A,B容器的体积之比? 使用含磷洗衣粉会造成什么污染? 热平衡后有热交换吗热平衡后是不再进行热交换还是热交换处以动态平衡(散发的跟吸收的一样多) 知道功率怎么求线径各位老大我是想问怎么求,及公式.但刚才的回答也谢谢你们,望能给个详细点的 同温同压时,A容器中的H2和B容器中的NH3所含氢原子数相等,则两容器体积比为?请写出分析和步骤,这道题不是很难,可是思路不顺畅,希望有人帮帮忙 祖国有哪些土地与环境受到破坏 知道电机功率怎么计算线径90千瓦的电机用多少平方毫米的线 在同温同压下,甲容器充满了H2,乙容器充满了NH3,如果两者氢原子个数相等,则这两容器的体积比为 毁坏耕地犯土地法那条 怎样根据用电功率计算,线径啊, 放在赤道上质量为m的物体,收到的重力G与他收到的地球引力F相比较哪个大谢谢了,大神帮忙啊说原因 co2气体保护焊机出丝不均匀是怎么回事 在相同条件下的密闭容器里,HCL和NH3的原子总数相等,则他们的体积比是 220V容积式热水器30升的用电功率是多少 托里拆利实验的水银柱的高度根玻璃管的_____,______无关,跟_____有关. 在同温同压下,A容器的H2和B+容器的NH3,若所含原子总数相等,则这两个容器的体积比是? 请冲220V/3KW的电热水器要多大的线? 一道酸碱盐化学题在20°时,将8g硫酸铜完全溶于92克水中,再加入20g氢氧化钠溶液,恰好完全反应,将沉淀滤去,在滤液中再加入跟溶液中溶质相同的物质,溶液恰好饱和,求:(1)所用氢氧化钠溶液 重力和质量关系公式 一物体的压力是作用在整个受力物体上的,那么计算压强为什么压力只除受力面积? 一道关于酸碱盐的化学题目4、下列各组物质能在pH=1的溶液中大量共存,且得到无色透明溶液的是( )A、BaCl2 NaNO3 KOH MgCl2 B、Cu(NO3)2 NaCl H2SO4 KNO3C、Na2CO3 NaCl KNO3 NH4Cl D、ZnSO4 Mg(NO3)2 NaNO3 KCl请写 自来水过滤器什么牌子好? 水杯有塑料味怎么办
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘