游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3671|回复: 10

关于处理只读的问题

[复制链接]

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
发表于 2007-1-8 17:04:00 | 显示全部楼层 |阅读模式
我 有个指针,来保存 单链表的头结点。
但是我不希望因为自己的误操作 导致了修改了该指针。

所以我  通过一个 GetHeadNode() const 方法来 获取表的头结点。

请问斑竹大侠, 还有什么其他的方式更容易防止错误的修改 指针吗?

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-1-8 17:15:00 | 显示全部楼层

Re:关于处理只读的问题

声明为常指针可不可以?
Type * const head;

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
 楼主| 发表于 2007-1-8 17:57:00 | 显示全部楼层

Re:关于处理只读的问题

应该算一种吧。不过 定义了就要初始化了,而我的首结点是动态在堆中创建的呀。
而 在类中常量不是要在 初始化列表内 初始化吗?
若是 全局的,都说尽量不用全局的。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-1-8 18:01:00 | 显示全部楼层

Re:关于处理只读的问题

声明为const void * const m_pHead;
从语义上讲是改不了了,除非有人malicious像是const_cast或是直接(void *)

如果想从根本上杜绝
可以学习Windows或Java的处理方法
就是说只有Handle,而没有真正的原生指针
说白了就是将指针访问加个壳Handle作为中间层,无效的或是非法的Handle操作将被直接无视

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
 楼主| 发表于 2007-1-8 18:24:00 | 显示全部楼层

Re:关于处理只读的问题

斑竹  就是要让我自己 定义个 HANDLE 和 HWND  HDC  类的东西吧, 好我去试试、。

非常感谢 斑竹回答。

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
 楼主| 发表于 2007-1-8 18:53:00 | 显示全部楼层

Re:关于处理只读的问题


  1. ifdef STRICT
  2. typedef void*   PROTECT;
  3. #define DECLARE_PROTECT(name) struct name##__ { int unused; }; typedef struct name##__ *name
  4. #else
  5. typedef PVOID PROTECT;
  6. #define DECLARE_PROTECT(name) typedef PROTECT name
  7. #endif

  8. DECLARE_PROTECT(HSNAKE);         //蛇句柄
  9. DECLARE_PROTECT(HSQUARE);       //方块句柄
  10. DECLARE_PROTECT(HMARIO);         //马里奥句柄
复制代码


斑竹, 我这么重定义后就可以 肆无忌惮的使用 而不怕被 自己不慎修改了?
用一下试试。

15

主题

368

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
发表于 2007-1-8 20:22:00 | 显示全部楼层

Re:关于处理只读的问题

在正常的指针使用层面上,加上const声明已经足够保证安全了。你这么做实际上意义不大。真正"肆无忌惮"?除非启用类似DEP之类的技术保证不被溢出。溢出绝对是杀手。(调了几年的服务器程序,各种各样的调试手段以及调试问题都遇到过,溢出造成的破坏以及隐蔽性现在依然令我心有余悸——我最讨厌调的:一个是溢出,还一个是多线程)

125

主题

364

帖子

396

积分

中级会员

Rank: 3Rank: 3

积分
396
QQ
 楼主| 发表于 2007-1-8 22:00:00 | 显示全部楼层

Re:关于处理只读的问题

那就 const吧, 我是想多长点见识,毕竟我眼界窄,不如各位经验丰富。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2007-1-9 21:40:00 | 显示全部楼层

Re:关于处理只读的问题

逻辑问题才可怕。。。

15

主题

368

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
发表于 2007-1-11 03:08:00 | 显示全部楼层

Re:关于处理只读的问题

就我的工作经验来看,逻辑问题造成的损害不会是游戏的硬伤,即使最严重的后果造成了玩家数据的异常事后也可以通过一些非技术层面上的手段补救。而且最重要的是逻辑问题可以比较容易解决。即使是运营当中的游戏出现了这样的问题也能在很快时间内得到补救(大不了短时间内关闭那个出问题的逻辑功能或是整个相关系统)。通常情况下逻辑错误我是不调试的。一来比较烦,二来也没什么技术难度,比较无聊。谁写的逻辑出问题交给相关的逻辑程序员处理便是。。

有些问题就很头疼,像溢出,并不能保证立即就能找到原因。找不到原因就要把所有可疑的代码梳一遍(因为并非所有代码都自己写的,这个过程相当痛苦,幸亏VC7以后的版本提供了正则表达式搜索功能,多少算有点帮助)。而且因为BUG解决的时间不确定问题,这会是对游戏的运营造成致命伤。因为程序的不稳定崩溃,使得服务器根本无法正常提供服务。根本不能像逻辑上的功能一样,哪个逻辑出了问题暂时屏掉就好了。
调服务器很痛苦的。。碰上 溢出+多线程(而且还是release环境,服务器很少有debug环境这么幸福的让我调的。。。) 有时候感觉真的很无奈,想扔着不管或是暂时逃避,但如果解决不了对整个游戏的运作都会产生致命影响。只能硬着头皮上。哎~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 05:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表