大家来看看这段程序的问题,谢谢!

common_man 2006-12-26 05:29:15
程序如下:

void executeAction (const NamedValue * nvPtr)
{
try {
if (NULL != nvPtr)
nvPtr ->executeActions();
}
catch (StandardException exception) {
throw(exception);
}
}

NamedValue * sendRequest( const NamedValue * nvPtr)
{
NamedValue * nvResponsePtr = NULL;
try {
nvResponsePtr = new NamedValue (*nvPtr);
if (NULL != nvResponsePtr)
executeAction(nvResponsePtr);
}
catch (Exception e) {
delete nvPtr;
throw(e);
}
return nvResponsePtr;
}

void addTask()
{
NamedValue * nvPtr = NULL;
NamedValue * nvResponsePtr = NULL;

nvPtr = new NamedValue ("CreateTaskManager", "1.0");
nvResponsePtr = sendRequest(nvPtr);
if (nvResponsePtr) {
nvResponsePtr->print();
delete nvResponsePtr;
}
return;
}

void main()
{
……
addTask();
}

请问这段代码有问题吗?谢谢
...全文
260 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
helanshan 2006-12-28
  • 打赏
  • 举报
回复
delete nvResponsePtr;
----------------------------
这个很明显有问题,不知道你delete 的哪个对象..
qq_sugar 2006-12-28
  • 打赏
  • 举报
回复
NamedValue * sendRequest( const NamedValue * nvPtr)
{
NamedValue * nvResponsePtr = NULL;
try {
nvResponsePtr = new NamedValue (*nvPtr);
if (NULL != nvResponsePtr)
executeAction(nvResponsePtr);
}
catch (Exception e) {
delete nvPtr;
throw(e);
}
return nvResponsePtr;
}

该函数中如果executeAction出现异常,nvResponsePtr 对象是否应该释放
另外在异常中是否应该释放传入的参数 nvPtr 对象?

感觉异常中应该 delete nvResponsePtr ,而不是nvPtr
搬不搬砖 2006-12-28
  • 打赏
  • 举报
回复
new是有可能抛出异常的,所以要catch
搬不搬砖 2006-12-26
  • 打赏
  • 举报
回复
void addTask()
{
NamedValue * nvPtr = NULL;
NamedValue * nvResponsePtr = NULL;

nvPtr = new NamedValue ("CreateTaskManager", "1.0"); //new可能异常
nvResponsePtr = sendRequest(nvPtr);
if (nvResponsePtr) {
nvResponsePtr->print();
delete nvResponsePtr;
}
return;
}
common_man 2006-12-26
  • 打赏
  • 举报
回复
也许是我没说清楚,是考试题目,呵呵,海涵
common_man 2006-12-26
  • 打赏
  • 举报
回复
to healer_kx(甘草 春去春回,花落谁家?心寄笔端,谁解我意?) :
注意,运行是用来验证答案而不是获取答案的,呵呵
common_man 2006-12-26
  • 打赏
  • 举报
回复
to ouyh12345() :

考试的时候是否可以直接在题目下面写上:“把问题说清楚点,没人会运行的”,就可以交卷子了,呵呵
cunsh 2006-12-26
  • 打赏
  • 举报
回复
NamedValue * sendRequest( const NamedValue * nvPtr)
========
这个函数也可能抛出异常. 调用这个函数的代码应该放到 try { } 中
能抛出异常的函数应该在后边写上异常规范呀
cunsh 2006-12-26
  • 打赏
  • 举报
回复
void executeAction (const NamedValue * nvPtr)
{
try {
if (NULL != nvPtr)
nvPtr ->executeActions();
}
catch (StandardException exception) { //应该用引用StandardException &
throw(exception); //重新抛出应该用 throw;
}
}

jixingzhong 2006-12-26
  • 打赏
  • 举报
回复
贴的这个部分,
没有看出有什么问题 ~~
healer_kx 2006-12-26
  • 打赏
  • 举报
回复
是啊,想运行代码也不全啊...
caocheng8230 2006-12-26
  • 打赏
  • 举报
回复
如上
ouyh12345 2006-12-26
  • 打赏
  • 举报
回复
把问题说清楚点,没人会运行的

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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