什么是断言错误?我读到这可能是由于传递给函数的指针的 NULL 值引起的。我正在从 Visual Studio 读取一个文件,并且我确信该文件存在。怎么会出现断言错误呢?
此外,我在我的 C 程序中发现了一条断言语句
assert(pred_dir<=2);
这段代码是从互联网上下载的(h.264视频编解码器的引用软件),我不太确定如何会得到这样的错误。抱歉,我无法发布源代码,因为它太大并且由四个项目组成。我只修改了代码来读取文本文件并收到此错误。
此外,什么是未处理的异常、访问冲突错误?
最佳答案
安assertion是您作为程序员期望在程序中的给定点明确正确的条件。许多编程语言都为您提供了断言条件的方法,并且作为程序员,您可以使用断言在许多问题发生之前发现并诊断它们。
例如,如果在程序中的特定点,您希望名为 a
的变量为 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)在创建发布版本时会自动将其关闭。
检查wikipedia article ,因为它更详细地解释了断言。
如果在已发布的产品或第三方库上触发断言,则很可能意味着该程序中存在错误。如果您能够重现该问题,请将其报告给程序的作者。
关于c - Microsoft Visual Studio 中的断言错误是什么?和未处理的异常访问冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18578607/