如何判断一个指针是无效 或者 错误的指针,如何捕获这样的异常?

chinawcs 2008-10-06 09:35:36
假如
char *s2;
s2=(char*)rr->comp->u.simple->u.generic(该项取值可以为 none, B, F三项)

b或者f 赋值后 s2都是正确指针 可默认值none 却报错说 s2 无效的指针 程序就退出了

望指点!tks
...全文
869 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
bopizi 2009-01-05
  • 打赏
  • 举报
回复
try
{

}
catch(...)这里不晓得什么类型可用三点
{
}
chinawcs 2008-10-07
  • 打赏
  • 举报
回复
问题是 赋值 有可能采用默认值 none 也就是结构体 没有分配指针 服务器端 要始终获得 该参数

中间的处理 不是咱们能该的没有原代码
deh_1984 2008-10-07
  • 打赏
  • 举报
回复
none 是不是NULL呢?

如果是,那么在给指针赋值后加以判定,是否为null,是那么做你想做的事情,不是亦然。

如果不是为NULL,那么你要先单步调,看赋值的是啥值,然后按这个值判定。
chinawcs 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 stivenjia 的回复:]
C/C++ code
__try
{

}
__excpet(EXCEPTION_EXECUTE_HANDLER)
{

}



试一下SEH
[/Quote]


这个可以 可当我 在用到其它代码上捕捉错误时 编译不过去

_try
{
authtype=q->auth->which;
}
_except(EXCEPTION_EXECUTE_HANDLER)
{
authtype=3;

}


编译出错
Cannot use __try in functions that require object unwinding

网上搜索了 说 Compile without /EHsc

可俺不太懂 ehsc

chinawcs 2008-10-06
  • 打赏
  • 举报
回复
首先谢谢大家的 关注与帮忙

因为刚接触c++ 所以我把代码贴出来 怕我说不清楚
3个结构体如下

typedef struct {
char *setname; /* set name */
int start;
int number; /* record number */
oid_value format; /* One of the CLASS_RECSYN members */
Z_ReferenceId *referenceId;/* reference ID */
Z_RecordComposition *comp; /* Formatting instructions */
ODR stream; /* encoding stream - memory source if required */
ODR print; /* printing stream */
bend_request request;
bend_association association;

int hits; /* number of hits */
int errcode; /* 0==OK */
char *errstring; /* system error string or NULL */
} bend_present_rr;

struct Z_RecordComposition {
int which;
union {
Z_ElementSetNames *simple;
Z_CompSpec *complex;
#define Z_RecordComp_simple 1
#define Z_RecordComp_complex 2
} u;
};

struct Z_ElementSetNames {
int which;
union {
Z_InternationalString *generic; //默认值为none 取值可以是 "B" "F"
Z_DatabaseSpecific *databaseSpecific;
#define Z_ElementSetNames_generic 1
#define Z_ElementSetNames_databaseSpecific 2
} u;
};




客户端程序赋值(vb代码) zc.SetOption "elementSetName", "F"

服务器端 获取参数

int ztest_present (void *handle, bend_present_rr *rr)

{
char *s1;
char *s2;
s1="F";
s2=(char*)rr->comp->u.simple->u.generic;

这时 s2 能得到正确值 "F"

如果客户端不赋值 采用默认值 s2 就是错误的指针 程序报错 退出了

cofanz 2008-10-06
  • 打赏
  • 举报
回复
try catch
stivenjia 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jason_wentzel 的回复:]
判断每一级的指针是否为空
[/Quote]
不可取,如果是个野指针或者释放后没有指向NULL你这种判断方式还行的通吗?
例如:debug下声明一个指针你不进行初始化你看看指向的是哪里?绝大部分都是0xcccccccc而非NULL
孤客天涯 2008-10-06
  • 打赏
  • 举报
回复
判断每一级的指针是否为空
stivenjia 2008-10-06
  • 打赏
  • 举报
回复

BOOL IsValidAddress(const void* lp,UINT nBytes,BOOL bReadWrite)
{
// simple version using Win-32 APIs for pointer validation.
return (lp != NULL && !IsBadReadPtr(lp, nBytes) &&
(!bReadWrite || !IsBadWritePtr((LPVOID)lp, nBytes)));
}
我看你有戏 2008-10-06
  • 打赏
  • 举报
回复
判断每一级的指针是否为空
chinawcs 2008-10-06
  • 打赏
  • 举报
回复
也就是 有一些参数 没有赋值 采用的默认值 none

我又定义指针 来指向该参数值 结果抱 错误指针



chinawcs 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rollrock1987 的回复:]
你的这个 问题 看不懂哇 哈哈
[/Quote]

是这样的 定义了一个 字符指针 char *s2 指向一个rr->comp->u.simple->u.generic 当generic不存在值(none)s2 就成了错误指针 报错了

我知道我说清楚没有。

chenyu2202863 2008-10-06
  • 打赏
  • 举报
回复
你的默认分配内存了吗?
使用之前保证没被销毁吗?
yc_8301 2008-10-06
  • 打赏
  • 举报
回复
使用MFC的宏应该可以吧。
ASSERT_VALID
ASSERT
共同期待高手出现。。。
rollrock1987 2008-10-06
  • 打赏
  • 举报
回复
你的这个 问题 看不懂哇 哈哈


chinawcs 2008-10-06
  • 打赏
  • 举报
回复
忘了 告诉大家 现在这个工程我是用 vs2005 vc++ 编译的
stivenjia 2008-10-06
  • 打赏
  • 举报
回复
不过SEH不支持C++
stivenjia 2008-10-06
  • 打赏
  • 举报
回复

__try
{

}
__excpet(EXCEPTION_EXECUTE_HANDLER)
{

}

试一下SEH
zhtigt 2008-10-06
  • 打赏
  • 举报
回复
初始化一下
char *s2 = NULL;
看看行不行
chinawcs 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yayafu 的回复:]
用try{
}
catch(...)
{
}捕获啊
[/Quote]


try
{
s2=(char*)rr->comp->u.simple->u.generic; //直接报错了
}
catch(Z_RecordComposition *lp1) //关键是这里怎么写 怎么总也捕捉不到异常
{
s2="b";
}
加载更多回复(4)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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