gpt4 book ai didi

c++ - 在自定义异常中仍然可以访问(误报?)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:32 29 4
gpt4 key购买 nike

这是我第一次尝试编写实现简单形式的堆栈跟踪的自定义异常类。

这是.h:

class error {

public:

error ();
error (const error & err);
~error ();

int level ();

private:

int _level;

};

这是.cpp:

error::error ()
: _level (0) {}

error::error (const error & err)
: _level (err._level) {}

error::~error () {}

int error::level () {
return ++_level;
}

然后我定义了两个宏,一个用于创建错误并在第一次抛出它 (INIT_ERROR),另一个用于踢出捕获的错误 (KICK_ERROR):

#define WHERE(stream) {fprintf (stream, " %-30s [%s: %3d]\n", __FUNCTION__, __FILE__, __LINE__);}

#define INIT_ERROR {fprintf (stderr, "# 0"); WHERE (stderr); throw error ();}
#define KICK_ERROR {fprintf (stderr, "# %2d", err.level ()); WHERE (stderr); throw;}

如你所料,使用如下:

    if (something wrong)
INIT_ERROR;

第一次,并且:

    try {
// some code
}
catch (error & err) {
KICK_ERROR;
}

对于所有其他时间。

但是,DrMemory(我在 Windows Xp 上工作)提醒我仍然可以访问的 block :

ERRORS FOUND:
0 unique, 0 total unaddressable access(es)
0 unique, 0 total uninitialized access(es)
0 unique, 0 total invalid heap argument(s)
0 unique, 0 total GDI usage error(s)
0 unique, 0 total warning(s)
0 unique, 0 total, 0 byte(s) of leak(s)
0 unique, 0 total, 0 byte(s) of possible leak(s)
3 unique, 3 total, 16 byte(s) of still-reachable allocation(s)
ERRORS IGNORED:
3 potential leak(s) (suspected false positives)

为了完整性,这是主要的:

void fun3 () {
fprintf (stderr, "nothing special");
INIT_ERROR;
}

void fun2 () {
try {
fun3 ();
}
catch (error & err) {
KICK_ERROR;
}
}

void fun1 () {
try {
fun2 ();
}
catch (error & err) {
KICK_ERROR;
}
}

int main () {
try {
fun1 ();
}
catch (error & err) {
cerr << "error catched in main" << endl;
}
}

我的代码有问题吗?有什么建议吗?

最佳答案

仍然可到达的分配不是泄漏,这是程序在退出时仍然可用的内存。它可能是从您使用的库中分配的。我不会为他们担心。

关于c++ - 在自定义异常中仍然可以访问(误报?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19903958/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com