| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1673 人关注过本帖
标题:指针越界
只看楼主 加入收藏
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
结帖率:96.25%
收藏
已结贴  问题点数:20 回复次数:5 
指针越界
我遍历下指针的值,怎么防止中间有越位,异常什么的? try catch throw?
for (int i=0x123456;i<(i+0x654321);i+=4)
    {
        if(*i==111)
            {
               
             }
    }

如果想看下指针i是不是异常,应该怎么try.

[ 本帖最后由 mfkblue 于 2012-12-2 23:29 编辑 ]
搜索更多相关主题的帖子: 越界 越位 
2012-12-02 22:55
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6814
专家分:42393
注 册:2010-12-16
收藏
得分:4 
try {
    for (int i=0x123456;i<(i+0x654321);i+=4) {}

}
catch (……) {
}

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-03 08:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:4 
用 try-catch 是不行的
你先得理解什么是“C++中的异常”,C++中的异常只是一种正常的状态信息,是属于逻辑上的异常,而非执行上的异常。
而你这种越界访问,在C++属于错误
因为C++实现不了你的功能。

如果是Windows(Linux中怎么做我不会),可以使用SEH
你的代码逻辑狗屁不通,我只能瞎猜猜,代码如下:
程序代码:
#include <windows.h>
#include <cstdio>

int main()
{
    for( int i=0x123456; i<(i+0x654321); i+=sizeof(int*) ) // 0x123456本身就不是4的倍数,不知道你搞什么
    {
        __try {
            if( *(int*)i == 111 )
            {
                printf( "%d ", i );
            }
        } __except( 1 ) {
            //printf( "*" );
        }
    }

    return 0;
}

2012-12-03 08:34
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:4 
学习一下

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-12-03 09:57
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
回复三楼.
const int  CurRoleBase=0x44b33c8;
const int CurListBase=0x44a9788;
void SelMon()
{   
    int* b8,*bc,*b380,*p1478;
    double *b31c;
    int* pb;
    p1478=(int*)CurRoleBase;//角色基址
    p1478=(int*)(*p1478+0x1478);//加偏移
    if ((*p1478==0xffff))//0xffff没有选定怪.
    {
        for (int i=CurListBase;i<(CurListBase+0xfFFF*4);i+=4)(对象基址循环)
        {
            pb=(int*)i;
            b8=(int*)(*pb+0x8);(偏移后值如果是0x2e是怪)
            bc=(int*)(*pb+0xc);(对像下标)
            b31c=(double*)(*pb+0x31c);(与对像之间距离)
            b380=(int*)(*pb+0x380); (0是活的,1是死的)                       
            if ((*b8==0x2E)&&(*b380==0)&&(*b31c<=20))
            {                                    
               
                *p1478=*bc;\\三个条件都符合把对像下标赋给角色指针就能选定怪.
                return;               
            }
            
            
        }
    }
   
}
问题有时能选中,有时直接游戏弹错退出游戏。我怀是不是循环的时候访问的未知的内存地址了,所以出错,不知道怎么判断。
如果只赋值几只我已知的怪物下标是不会出错的。
SEH是什么,搜的不清楚,有什么格式没.
你不觉得我开贴问的比我贴这么多代码问,你看起来要方便的多吗?

[ 本帖最后由 mfkblue 于 2012-12-3 17:06 编辑 ]
2012-12-03 16:37
Nitpicker
Rank: 1
等 级:新手上路
帖 子:26
专家分:8
注 册:2012-3-28
收藏
得分:4 
路过学习
2012-12-03 17:21
快速回复:指针越界
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018120 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved