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

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

编辑:说三道四文库 发布时间:2017-09-25 07:10
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的例子
盘点2014:最受关注的十大云服务创业公司 基于Kubernetes构建Docker集群管理详解 漫画:编程语言学习曲线 彩云天气: 328万元大奖背后的故事 iOS开发的22个奇谲巧技 谁是最受欢迎IT企业?技术、薪酬、发展空间、创新能力大评比 Jolt Awards 2015最佳编程工具奖榜单揭晓,Cloud9 IDE众望所归! 展望2015:数据中心行业的十大预测 亚信CTO金亚东:传统企业向产业互联网转型的两条路径 微信评论功能开启将成净土还是地狱 如何定位Android NDK开发中遇到的错误 流行从这里开始,MDCC 2014十大人气产品榜单揭晓! 专访POWER 8编程挑战赛选手唐刚:大数据计算永远是主角 微信公众号认证命名松绑,您怎么看? LambdaNet:纯Haskell实现的人工神经网络库 专注模式识别,易道博识为海量信息输入提供便捷之门 【问底】Michael G. Noll:整合Kafka到Spark Streaming——代码示例和挑战 2014年手游和社交游戏行业重要趋势解读 腾讯副总裁罗道锋:共建全国最大安全云库 5分钟内数据精准共享 Connected Cycle 一举两得的智能自行车踏板 CES可穿戴产品前瞻:汽车厂商入局智能手表领域 果断Mark!国外程序员收集整理的PHP资源大全 Google 2015项目前瞻:智能隐形眼镜、Google X、Ara Swift的坑:如何实现enum的多选? Swift,其实没那么任性 如何利用单台服务器实现10万多个Git仓库托管 Swift的初始化方法 TIOBE 2015年1月编程语言排行榜:JavaScript成大赢家 为什么iOS开发不需要Storyboard? 仅有纽扣大小的开发板 Intel Curie “撒娇”的豌豆荚?被百度手机助手屏蔽太糟心! 请教各位一个文件问题! 向各位高手请教 请关注国内第一套真正意义上的OLAP套件! 如何在access 2000里面使用SQL语句建立表 请关注国内第一套真正意义上的OLAP套件! 关于同一个包中的引用问题! 关于数据库关联显示的问题 请问如何确定安装程序的进度 请关注国内第一套真正意义上的OLAP套件! 如何将excel中数据加入到access中去呢? 急=>救救我:怎么约束用户只能输入中文呢?(用正则表达试吗?) 关于游戏大厅的作用???(来者有分) lhb再吗? 如何作出中关村这个效果?http://product.zol.com.cn/products/product_search.php?subcatid=28 怎样把两个BYTE连接成一个short类型 关于 <select>....</select>的问题 急,请各位老大指点:popmenu为什么有时候会出现在屏幕的最左上角 如何给多个变量赋值? Lotus Domino Server 怎样在局域网(没有连入internet)中设置,目录服务器?我想用netmeeting给学生们上课 寻找大连的朋友,共同参加趋势程序设计大赛! 急=>救救我:怎么约束用户只能输入中文呢?(用正则表达试吗?) 问一个超简单的问题。 新手的问题-- dataset或datatable中可以存放dataset吗?(在线) 问一个超简单的问题。 在c/s下面如何分页呢? 网站社区近日遭到不明人物的攻击,如何解决 如何查看死锁时1204跟踪标志错误日志清单,有分相送! 流光的启动画面很漂亮啊~~请问是怎么实现的? 如果要大量生产自己的产品和在市场上销售... 难受!没有信誉了,怎么活呀?人讲的什么呀?讲得是信誉呀. XML初学者问题:刷新数据 一个汇总查询的问题?? 请问,在用VB.NET写WEB应用程序时要怎么在网页间传递变量. 大家帮帮忙! 请问高手,在用MDI和数据库相连后,怎么样把自动生成的Form当成Page? 如何利用单片机取得电话来电号码? 如何插入名次字段数据? 如何插入名次字段数据? 在远程计算机上执行一个应用程序时,该程序用的是我的资源还是对方的? 用Borland C++ Builder 开发企业管理系统 又出现错误了????? 求助!!如何在StringGrid中显示ADOconnection中的数据?? 为了运行XML,服务器究竟要怎么样才行? directx屏幕捕获,为什么我的这段代码不行 小问题,大侠帮忙,小弟不胜感激!!!!! 我想使用一个字段来存储2万字左右的文章应该用什么类型(text不够用的)? 向非窗口类的对象发送消息呢? 如何重新检索 救急:Win me开始菜单及Taskbar的小图标都变花了,如何解决?up有分 Thank you for giving me such useful advice.You're welcome.That's ____ friends are ____. 《我和僵尸有个约会3》中完颜无泪,嫦娥,瑶池圣母的扮演者是谁啊?怎么都那么漂亮! (歌词)摩擦,摩擦,一步两步,一步两步,是魔鬼的步伐 这是什么歌? Thank you for giving me such a beautiful night 瑞吉欧教育体系的课程对我国幼儿园课程有那些启示? 歌词)摩擦,摩擦,一步两步,一步两步,是魔鬼的步伐!这是什么歌? 本人初三 如何提高英语阅读理解本人英语主要是阅读理解和完形填空不行 求方法 瑞吉欧幼儿教育中所体现出的教学特色有哪些 马援诫兄子严敦书马援提出的2个告诫是什么 路由器 的 ACL 孩子性格的发展及其培养.挺邻居说孩子性故的培养和发展是非常重要的,但是我还不知道怎么去培养孩子的性故,有没有这类的书籍啊. 伏波将军马援兵器有哪些我看了许多的小说 里面都有伏波将军马援的一些兵器 武功之了能具体详细的列出来吗? 速回 专家哈 日益强大的益是什么意思 求 马援 简介 l have four apples 日益自信的益是什么意思 马援得胜回朝是对孟冀的态度?体现了马援怎样的精神 单克隆抗体是异源二倍体吗 为什么说辛亥革命没有改变旧中国半殖民半封建的社会性质 宝剑锋从磨砺出 梅花香自苦寒来英语怎么翻译 请问会计公式 ASSETS+Expenses+Drawing=Liability+Owner's Equity+Revenue 如题.A+E+D=L+OE+R 请accounting高手帮我解释一下! 跪求4.5.6大题,要过程写到纸上,初二数学,跪求了 日益亲密的益是什么意思有用滴. liabilities are claims agaist asset 各位帮帮我吧,跪求4.5.6大题,要过程,写到纸上,跪求了绝对采纳 该写句子 l got know Peter three years ago.l _____ _____Peter ______three years ago 为什么我每天都吃很多饭仍然长不胖. 电压表到底测的是谁的电压 益是什么意思 为什么我每顿饭吃得很多,却长不胖?(非诚勿扰)为什么我每顿饭吃得很多..却长不胖?我身高180体重却还不到110.我看过了中医,也吃过两副中药.肠胃应该没什么问题,也不是经常的拉肚子.就是 我这起的是什么?在腰上、怎么治啊 受益无穷的益是什么意思. 为什么我吃许多的饭 不长胖. 羚羊木雕人物关系快! 《颜回好学》中的益是什么意思, 为什么我吃再多的饭也不长胖AH He has got three apples.中has got 做什么成分 找一首英文歌,快节奏的,里面有DI DI DI DI DI 或BI BI BI BI BI应该是比较新的歌,女声的,英文歌节奏比较快 好像歌词是 i 'm so LOVELY THAT BI BI BI BI BI ,歌词应该是不对的,她常几句就会跟上五个BIBIBIBIBI 为什么我吃再多的饭都不长胖? 求一篇初一英语首字母填空要有六个以上的空字不能太少 如果没有宇宙的话,世界是什么样子的.又有什么存在.呵呵,想到这一点好像觉得什么都不重要了. A.will have;give.B.will have;will give.C.have;giveWe --- more time to play sports as long as our teachers--- us less homework Amy has the f-------apples of the three girls. 读si到字(第4声) 我要50个100字左右的历史故事,至少90字,最多110字. 求一篇初一英语的首字母填空是完整的一篇,不要太长哦.要让同学抄的,太长偶怕挨揍=.要求:短小精悍,容易看懂, si、shi第四声后面加个什么字好听? 有"马"字的历史故事 我和僵尸有个约会中嫦娥的眼睛是什么颜色 siji si是四声ji是一声是什么组词 家乡的马500字快 我和僵尸有个约会中的嫦娥是谁 蛇缠腰的病症我父亲腰间出了很多的红豆豆,但是不像蛇缠腰那种会痒.他只感觉到疼,现在从最初的背部几个豆豆已经发展到肚子有几片红豆.并且肚子右侧的肝部位置伴随的皮肤神经很疼,而 关于马的历史故事 30字一定要短,否则就别打了 我和僵尸有个约会里面的嫦娥叫什么名字都演过什么电视 英语改错 错在哪里Oliver Twist, the hero of the story, he was an orphan. 在生活中你遇到过羚羊木雕文中类似的事吗写下来 200∼300字 我和僵尸有个约会3里饰演嫦娥是谁 一道英语改错题!请问它们错在哪里,1、We are convinced of his willingness and able to do anything.2、He stood in the rain,coldly and wet.3、Walk into the school,you will see the teaching building.4、The principal expressed his wish,ho 刚果(金)反政府武装陷入绝境 要求立伊拉克总理访美寻求武器技术支持 防内日本企业为免无期限雇佣临时工 设定合孙杨谎称驾照未带被识破?律师:若属实东方卫视知名主持人朱桢离婚 前妻炫富埃及前总统穆尔西到达受审地点 将接受朴槿惠向朝鲜抛橄榄枝:我愿随时与金正杰奎琳·肯尼迪的五个不解之谜登顶黄山 易道为松 2013易道教育武安房屋塌陷续:现场共发现6名失踪人希腊庆祝母乳喂养周 数百母亲当众哺乳传韩对朝政策或出现变化 韩当局称报道比亚迪称在美劳资情况遭失实报道美国捕获长约4米重达330公斤巨鳄【德媒:日本吃醋中德相爱 认为遭受德国英国监管报业是对过度“自由”的反弹美国务卿称美国永远不会允许伊朗有核武罗德曼力促朝篮球队访美 称金正恩是个朴槿惠就历史问题斥责日本 称元首会晤日防卫省对大规模军演限制报道让日媒集俄总统普京将访问越南 适逢俄越潜艇交组图:范冰冰与大头娃娃合影 戴墨镜帅陕西旬阳发生两客车相撞事故 致3死7习近平巴基斯坦之行,筑牢中巴友好基石福建自贸区启动催速两岸经贸对接合作贵州通报8起违反中央八项规定典型案例上海破获LV等名品售假案 涉案金额超太原破获一批涉毒重大案件张德江参加全国人大常委会第十四次会议最高法发布2014年知识产权案件年度苹果公司赢得“一种聊天机器人系统”专梁振英将出访吉隆坡出席东盟领袖论坛湖北宜昌三人“傍名牌”制假酒被判刑上海破获跨境网络售假大案 团伙涉案金全国首例姓名权行政诉讼案恢复审理埃及一法院判决前总统穆尔西20年监禁索马里首都摩加迪沙一餐厅遭汽车炸弹袭全国首例姓名权行政诉讼案恢复审理《趋势:首届世界互联网大会全纪录》近黄明谈与李菲儿亲密戏:一定会洗澡刷牙索马里首都市中心发生汽车炸弹事件 致最高法发布知识产权案年度报告:疑难案
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘