c++调试中断异常
Posted
技术标签:
【中文标题】c++调试中断异常【英文标题】:c++ debug break exception 【发布时间】:2016-11-28 14:45:57 【问题描述】:我正在使用 Visual Studio 编写 C++ 代码
我有以下代码
// fondamentaux C++.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
//initialisation des variables
int total 0 ;
int tab[5] 11,22,33,44 ;
//on double la valeur de l'index pour additionner les valeurs entre elles
(*tab) = 2;
//boucle pour additionner les valeurs entre elles
for (int i = 0; i < sizeof(tab); i++)
total += *(tab + i);
//libérationn de l'espace mémoire
delete[] tab;
*tab = 0;
//affichage du total
cout << "total = " << total << "\n"; // le total est 121
return 0;
理论上一切都应该正常,但是当我尝试使用本地调试器启动时 error message
如何调试它?
【问题讨论】:
你只有delete
你new
,所以delete[] tab;
是不正确的。
另外,进入你的程序或者在第一行设置一个断点,然后逐行执行直到你看到问题。
谢谢它的工作 ;)
当您遇到这样的意外断点时,请始终查看“输出”窗口。毫无疑问,您会看到来自 Debug Heap 的消息,告诉您代码中的 UB。
@Zatharan,就像 crashmstr 和 Nikolay Jambazov 的建议一样,这与您的代码有关,您可以在使用 new 分配内存时调用 delete 数据。 Nikolay Jambazov 发布了答案。
【参考方案1】:
'tab'指针指向分配在栈中而不是在堆中的内存,所以函数退出后内存会自动释放。调用
delete[] tab;
错了。不用调用,内存会自动释放。
*tab = 0;
也是错误的,因为这样定义,指针是'const'。 如果你想在堆中分配内存,你应该这样做:
int* tab = new int[5] 11,22,33,44 ;
你的其余代码都可以工作。
【讨论】:
以上是关于c++调试中断异常的主要内容,如果未能解决你的问题,请参考以下文章
防止 Visual Studio 调试因明显的“未处理异常”而中断