2

什么是断言错误?我读过它可能是由传递给函数的指针的 N​​ULL 值引起的。我正在从 Visual Studio 读取一个文件,并且我确定该文件存在。怎么会有断言错误?

另外,我在我的 c 程序中找到了一个断言语句

assert(pred_dir<=2);

此代码是从 Internet 上下载的(h.264 视频编解码器的参考软件),我不太确定我会如何得到这样的错误。抱歉,我无法发布源代码,因为它太大并且包含四个项目。我只修改了代码以读取文本文件并收到此错误。

另外,什么是未处理的异常,访问冲突错误?

4

3 回答 3

2

断言是一个条件,作为程序员,您希望在程序中的给定点明确地为真。许多编程语言为您提供了一种断言条件的方法,作为程序员,您可以使用断言在许多问题发生之前发现和诊断它们。

例如,如果在程序中的特定点,您期望一个名为abe的变量0,您可以编写:

assert(a == 0);

如果在运行时,a不在0程序的那个特定部分,你会得到一个人为的错误,调试器会停在那里,这样你就可以诊断你的问题,并理解为什么a不是0

一个非常常见的断言就像

assert(some_pointer != NULL); // We already checked this before

在您的具体示例中,调用的变量pred_dir应小于或等于2。如果你在那里得到一个断言错误,这意味着由于某种原因,pred_dir大于2. 由于程序的其余部分没有预料到这一点,因此继续进行是没有意义的,程序将停在那里。

请记住,断言是帮助您实现“健全性检查”的调试辅助工具,而不是向用户显示错误的一种方式。因此,鼓励您在制作程序时使用大量它们,以确保您对程序状态的所有假设都是正确的。如果你的程序是正确的,断言永远不应该停止程序。

由于断言是一种调试辅助,因此在发布程序以分发给用户时检查它们是没有意义的。因此,许多程序员在这样做时会关闭断言检查。许多环境(如 Visual Studio)在创建发布版本时会自动关闭它们。

检查维基百科文章,因为它更详细地解释了断言。

如果在已发布的产品或第三方库上触发了断言,则很可能意味着该程序中存在错误。如果您能够重现该问题,请将其报告给程序的作者。

于 2013-09-02T18:07:10.153 回答
1

回答这个问题:什么是断言错误?

如果程序员认为一个条件非常重要以至于它必须始终为真,并且如果发现条件为假,则不应继续执行,他可以做出断言。您发布了一个很好的示例,如果条件 (pred_dir<=2) 返回 true,则继续正常执行,但如果返回 false,则停止执行,并显示一些关于哪个断言返回 false 的指示。

编辑:断言可用于调试您的代码,或者如所述仅用于在发生非常错误的情况下停止执行。

于 2013-09-02T18:06:07.383 回答
0

此错误可能是因为您计算机上的 Temp 文件夹指定了只读访问控制。因此,Visual Studio .NET 或 Visual Studio 2005 安装应用程序无法将临时安装文件复制到本地硬盘。

解决方案:要解决此问题,请删除 Temp 文件夹的只读访问控制。为此,请按照下列步骤操作:

a) 在您的计算机上找到 Temp 文件夹。

b) 注意 通常,此文件夹位于 C:\Documents and Settings\User Name\Local Settings 中,其中 User Name 是您的用户名。

c) 右键单击​​温度,然后单击属性。

d) 在属性下,单击以清除只读复选框。

注意:可能会出现“确认属性更改”对话框(此行为取决于 Temp 文件夹的内容)。如果出现此对话框,请单击将更改应用到此文件夹、子文件夹和文件,然后单击确定。

e) 单击确定。

于 2013-09-02T18:15:24.747 回答