我正在失去控制,无法调试
I am losing control and unable to Debug
class Base
{
private:
int nID;
friend int fnDeleteBase(Base* base);
public:
Base( int baseID):nID(baseID) { cout << "Base Constructed with value" << endl; }
Base () : nID(5){cout << "Base Constructed WITHOUT value" << endl; }
~Base() { cout << "Base class object killed " << endl; }
};
int fnDeleteBase(Base* base) // Line 1
{
delete base; // Line 2 - important
cout << "Base object deleted " << endl;
return (1);
}
int main()
{
Base aBase; // Line 3
try
{
int i = fnDeleteBase(&aBase); // Line 4
}
catch(...)
{
cout << "Exception handled " << endl;
}
return (0);
}
上面的代码片段我正在调试。我无法进入正在删除基本对象的第 2 行。一旦我尝试进入或运行第 2 行,控件就会消失,我必须终止调试或执行
我得到的输出是:
Base Constructed (any of the construction is valid)
Base class Object killed
但是一切正常,如果将第 3 行更改为 Base * aBase = new Base();
.控制台上的输出为:
Base Constructed (any of the construction is valid)
Base class Object killed
Base object Deleted
有人可以分享两者背后的技术细节吗?
您应该只在使用new
构造的指针上使用delete
(或分配给使用 new
构造的其他指针的指针(,没有例外(我知道(。
在其他任何情况下使用 delete
(这是在第一种情况下发生的情况,因为 fnDeleteBase
的参数是指向 Base aBase
的指针,它不是指针,那里没有new
关键字(会导致未定义的行为。
解释编译器的确切作用并没有真正的帮助,因为对于未定义的行为,这可能因编译器而异。应该不惜一切代价避免这种情况。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 控制允许动态运行c++的并发操作数
- 在linux上调试巨大的C++项目
- 从控制台中删除最后打印的元素
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在VS调试器中监视映射条目
- 使用调试/崩溃报告将应用程序部署到客户端
- 是否可以使用if constexpr删除控制流语句
- VC++本机单元测试,找不到调试符号
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容
- 如何使C++调试语句显示在 gdb 控制台中
- printf 语句在调试期间未在控制台上打印
- 是否可以在 Visual Studio 中的 Win32 C++应用程序中的控制台中进行调试
- 我可以控制调试器窗口中显示的浮点数和双精度变量的位数吗?
- 如何在性能和VMS上对C++进行代码审查/调试/编码/测试/版本控制
- Xcode 5 带有 %s 格式说明符的 LLVM printf 在调试控制台中不起作用
- log4cplus在Visual Studio调试控制台中进行日志记录
- 我正在失去控制,无法调试
- 语法控制&调试