明天就放假.. 散分. 同时来计论一个问题. 问题的最佳回答者再加开一个 200 分贴

cmain83 2003-09-29 11:16:40
如何在 Delphi 中使用双指针?
相当于 C 中的 char ** St;

代码:

Type
P_usePChar = ^PChar;


procedure TForm1.FormCreate(Sender: TObject);
var
m_outputBuffers: P_usePChar;
i: Integer;
const
N_BUFFERS = 10;
StringLeng = 255;
begin
m_outputBuffers := P_usePChar(GlobalAllocPtr(GMEM_MOVEABLE or GMEM_SHARE,
SizeOf(PChar) * N_BUFFERS));

for i := 0 to N_BUFFERS - 1 do
begin
m_outputBuffers^ := PChar(GlobalAllocPtr(GMEM_MOVEABLE or GMEM_SHARE,
SizeOf(Char) * StringLeng));
StrCopy(m_outputBuffers^, PChar(IntToStr(i)));
m_outputBuffers^ := m_outputBuffers^ + 1;
end;

{
此处应加上什么语句才能使
m_outputBuffers^ 返回开始处??
}

for i := 0 to N_BUFFERS - 1 do
Self.Memo1.Lines.Add(m_outputBuffers^ + ':' + IntToStr(DWORD(m_outputBuffers^)));

{
此处应加上什么语句才能使
m_outputBuffers^ 返回开始处??
}

for i := 0 to N_BUFFERS - 1 do
begin
GloBalFreePtr(m_outputBuffers^); //释放产生错误: 无效指针
m_outputBuffers^ := m_outputBuffers^ + 1;
end;
GloBalFreePtr(m_outputBuffers); //释放内存
end;
...全文
80 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
LSF1982 2003-09-29
  • 打赏
  • 举报
回复
混点分..
snowfog 2003-09-29
  • 打赏
  • 举报
回复
关注
cmain83 2003-09-29
  • 打赏
  • 举报
回复
这样做只是为熟悉指针操作.

其实, 这里用 动态数组很容易实现. 并且占用的内存一样..
upingking 2003-09-29
  • 打赏
  • 举报
回复
学习
zhoutian618 2003-09-29
  • 打赏
  • 举报
回复
{
此处应加上什么语句才能使
m_outputBuffers^ 返回开始处??
m_outputBuffers^ := m_outputBuffers^ - N_BUFFERS;///////?????????
}

我很少这样去动态申请内存。
我一般用TLIST和结构或类居多。
rwdx 2003-09-29
  • 打赏
  • 举报
回复
up
cmain83 2003-09-29
  • 打赏
  • 举报
回复
ronaldli(木的)
也去顶一下吧..

cmain83 2003-09-29
  • 打赏
  • 举报
回复
还请

kylincn(笨笨)


http://expert.csdn.net/Expert/topic/2313/2313878.xml?temp=.5922815
顶一下..
cmain83 2003-09-29
  • 打赏
  • 举报
回复
笨,,,

这也想不到.


结贴啦...
kylincn 2003-09-29
  • 打赏
  • 举报
回复
还抱错?我这没有啊。
tw_cshn 2003-09-29
  • 打赏
  • 举报
回复
最后在把指针返回就不出错了

DEc(m_outputBuffers, N_BUFFERS);
for i := 0 to N_BUFFERS - 1 do
begin
GloBalFreePtr(m_outputBuffers^); //释放产生错误: 无效指针
//m_outputBuffers^:=nil;
INC(m_outputBuffers);
//^ := m_outputBuffers^ + 1;
end;
DEc(m_outputBuffers, N_BUFFERS);
GloBalFreePtr(m_outputBuffers);
cmain83 2003-09-29
  • 打赏
  • 举报
回复
wush007(防守反击) 你有种
阿亮 2003-09-29
  • 打赏
  • 举报
回复
一群猪
crossbow 2003-09-29
  • 打赏
  • 举报
回复
看看
sheepcyk 2003-09-29
  • 打赏
  • 举报
回复
先up,问题在看看
cmain83 2003-09-29
  • 打赏
  • 举报
回复
up

快呀
甜而不腻 2003-09-29
  • 打赏
  • 举报
回复
up
cmain83 2003-09-29
  • 打赏
  • 举报
回复
不错..
答案正确..

不过.
还有一点:
一到释放就会弹出一个内存窗口..

除非把

GloBalFreePtr(m_outputBuffers);
去掉就不会出错..

WHY?
是不是在上边的循环中已经释放了??
dickeybird888 2003-09-29
  • 打赏
  • 举报
回复
学习
kylincn 2003-09-29
  • 打赏
  • 举报
回复
参考ronaldli(木的) 改了一下,结果正确!

var
m_outputBuffers: P_usePChar;
i: Integer;
const
N_BUFFERS = 10;
StringLeng = 255;
begin
m_outputBuffers := P_usePChar(GlobalAllocPtr(GMEM_MOVEABLE or GMEM_SHARE,
SizeOf(PChar) * N_BUFFERS));

for i := 0 to N_BUFFERS - 1 do
begin
m_outputBuffers^ := PChar(GlobalAllocPtr(GMEM_MOVEABLE or GMEM_SHARE,
SizeOf(Char) * StringLeng));
StrCopy(m_outputBuffers^, PChar(IntToStr(i)));
//m_outputBuffers^ := m_outputBuffers^ + 1;
Inc(m_outputBuffers);
end;
//返回 m_outputBuffers^指向的第一个字符
//Here :
DEc(m_outputBuffers ,N_BUFFERS);
// m_outputBuffers^ := @m_outputBuffers^;
// or m_outputBuffers^指向的第一个PChar
//m_outputBuffers^ := @m_outputBuffers;

{
此处应加上什么语句才能使
m_outputBuffers^ 返回开始处??
}
//返回十个字符串
for i := 0 to N_BUFFERS - 1 do
BEGIN
Self.Memo1.Lines.Add(m_outputBuffers^ + ':' + String(m_outputBuffers^));
INC(m_outputBuffers);
END;

//和上面一样
{
此处应加上什么语句才能使
m_outputBuffers^ 返回开始处??
}
DEc(m_outputBuffers, N_BUFFERS);
for i := 0 to N_BUFFERS - 1 do
begin
GloBalFreePtr(m_outputBuffers^); //释放产生错误: 无效指针
INC(m_outputBuffers);
//^ := m_outputBuffers^ + 1;
end;
GloBalFreePtr(m_outputBuffers); //释放内存
加载更多回复(15)
《Vue和SpringBoot打造假日旅社管理系统》课程,将讲解如何使用Vue和SpringBoot开发这个项目,手把手演示开发流程!附赠源码、文档、数据库脚本等全部资料,提供售后答疑。 课程简介本课程讲解的是《基于 Vue 和 SpringBoot 的假日旅社管理系统》,该系统支持民宿档案、民宿新闻、民宿预定、民宿评论这四大核心业务,适用于乡村民宿企业的民宿预定业务。系统给每个民宿档案提供一个唯一标识,对民宿预定、评论等各个环节进行快速批量的数据采集,确保游客及时掌握景区民宿的真实数据,方便游客进行民宿预定。另外系统还包括员工管理、组织机构管理、文件管理、权限管理功能,给旅社企业提供更个性化的民宿管理模式。假日旅社管理系统采用了基于角色的访问控制,角色和菜单关联,一个角色可以配置多个菜单权限;然后再将用户和角色关联,一位用户可以赋予多个角色。这样用户就可以根据角色拿到该有的菜单权限,更方便旅社企业的管理人员进行权限管控。   软件技术选型前端Vue:Vue 是构建前端界面的核心框架,本系统采用 2.6.14 版本。View UI:基于 Vue.js2.0 的组件库,本系统采用 4.7.0 版本。后端Spring Boot:构建系统核心逻辑的后端框架,本系统采用 2.7.0 版本。MyBatis / MyBatis Plus:后端连接数据库的框架,本系统采用 3.5.2 版本。数据库MySQL:本项目的主数据库,本系统采用 8.0.29 版本。Redis:本系统采用基于 Windows 版本的 Redis,用于图形验证码和用户菜单权限的临时存储,采用了 5.0.14 版本。开发环境VsCode:项目前端的开发工具,使用版本为 1.68.0。IntelliJ IDEA :项目后端的开发工具,使用版本为 2021.3.2。Jdk:Java 的开发环境,使用版本为 17.0.3.1。Maven:后端项目的打包工具,使用版本为 3.6.2。NodeJs:前端项目的开发环境,使用版本为 16.13.0。 软件架构分析基于 Vue 和 SpringBoot 的假日旅社管理系统包括了系统基础模块、民宿档案模块、民宿新闻模块、民宿预定模块、民宿评论模块这五大功能模块,其架构如下图所示。  接下来,分别对五大模块进行详细介绍。系统基础模块系统基础模块,是用于支撑假日旅社管理系统的正常运行,这个模块包括了登陆注册模块、员工部门管理、菜单权限管理等。假日旅社管理系统支持用户使用账号、密码和图形验证码登陆,操作界面如下图所示。  假日旅社管理系统支持用户使用手机号、姓名、密码和图形验证码注册,操作界面如下图所示。 用户成功进入系统后,可进入到基于 Vue 和 SpringBoot 的假日旅社管理系统的首页,首页展示了当前登陆的地址、现在的时间和用户配置的常用模块,如下图所示。 接着用户点击左侧的用户管理,即可进入用户管理模块,用户管理模块的首页如下图所示。 用户可以在这个模块对系统登陆用户的档案进行维护,包括添加新用户、删除用户、编辑用户、根据姓名/部门查询用户。用户可以进入部门管理模块,管理旅社的部门数据,如下图所示。 同理用户可以进入到菜单管理模块,对系统的菜单进行管理,菜单管理模块的操作界面如下图所示。 民宿档案模块第二个模块是民宿档案模块,民宿档案就是用来管理民宿的数据,民宿档案包括民宿的名称、面积、房号、房间类型、早餐情况、价格、备注等,以下是民宿档案模块的主界面。用户可以点击顶部的“新增”按钮,进入民宿档案添加界面,添加民宿档案数据,如下图所示。 其中房间类型为下拉框单项选择,如下图所示。还有早餐情况也是下拉单选,如下图所示。 用户可以对现有的民宿档案数据进行编辑更新,只需点击每一行民宿档案数据的“编辑”按钮,即可进入民宿档案数据的编辑界面,如下图所示。 用户也可以对不需要的民宿数据进行删除操作,用户点击删除时,系统会弹出二次确认弹框,如下图所示。  民宿新闻模块第三个模块是民宿新闻模块,民宿新闻就是用来管理民宿的新闻资讯,包含的功能如下所示。 民宿新闻包括民宿的名称、面积、房号、房间类型、早餐情况、价格、备注等,以下是民宿新闻模块的主界面,其中的图片仅供测试样例使用。用户可以点击顶部的“新增”按钮,进入民宿新闻添加界面,添加民宿新闻数据,如下图所示。 新闻描述字段采用了 ueditor 富文本编辑器,这是由百度 web 前端研发部开发的所见即所得的开源富文本编辑器,具有轻量、可定制、用户体验优秀等特点,基于 MIT 开源协议,所有源代码可自由修改和使用。 用户可以对现有的民宿新闻数据进行编辑更新,只需点击每一行民宿新闻数据的“编辑”按钮,即可进入民宿新闻数据的编辑界面,如下图所示。 民宿预定模块第四个模块是民宿预定模块,旅客可以在民宿预定模块中预定民宿,达到旅客的住宿目的,民宿预定模块包含的功能如下所示。民宿预定包括了预定民宿 ID、预定民宿名称、预定日期、下单时间、下单人 ID、下单人姓名、价格、是否付款、下单备注等字段,旅客首先进入民宿档案模块,可以看到每一行民宿数据都有一个预约按钮,如下图所示。 如用户点击 1 幢 102 民宿的预约按钮后,会弹出预约确认框,需要输入预约的日期,日期表单默认选择今日,如下图所示。 旅客需要点击“确认预约”按钮,完成预约操作,系统给与“预约成功”提示,如下图所示。 预约成功后,旅客可以从民宿预定模块中进行查询,如下图所示。 最后旅客进行付款操作,点击每一行右侧的付款按钮,如下图所示。支付完成后,系统将预定单的支付状态改为付款,预定流程结束,如下图所示。 民宿评论模块 第五个模块是民宿预定模块,旅客可以在民宿预定结束后评论民宿,以帮助更多的人了解民宿,民宿评论模块包含的功能如下所示。 民宿评论包括了民宿名称、民宿 ID、评论时间、评论内容、评论人 ID、评论人姓名等字段,旅客首先进入民宿档案模块,可以看到每一行民宿数据都有一个评论按钮,如下图所示。 旅客点击评论后,系统给与弹框反馈,如下图所示。  用户输入评论内容后,点击确认评论按钮,即可完成评论操作,如下图所示。  旅客评论后,即可在民宿评论模块中查看此评论数据,如下图所示。 也可以在民宿模块中,双击民宿数据查看评论信息,如下图所示。 项目总结本软件是基于 Vue 和 SpringBoot 的假日旅社管理系统,包含了民宿档案、民宿新闻、民宿预定、民宿评论这四个功能模块。 开发本系统的目的,就是为了帮助旅游景点的民宿企业提高民宿管理效率,降低人力成本,让旅游景点的民宿企业获得更多的经济效益。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧