c - Microsoft Visual Studio 中的断言错误是什么?和未处理的异常访问冲突?

标签 c h.264 assertions

什么是断言错误?我读到这可能是由于传递给函数的指针的 N​​ULL 值引起的。我正在从 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/

相关文章:

c - 从 C 应用程序运行 shell 脚本

c中清理双链表Trie结构

video - FFmpeg 内存使用情况

video - 如何获取 h264 视频信息?

java - Eclipse 在组织导入时用 StricAssertions 替换 Assertions

c++ - 按值内存泄漏的函数调用

c - 带有二维动态阵列的分段故障(核心转储)

FFMPEG 和 H264 编码 mp4

javascript - ol-debug.js - 断言失败 : 3rd instruction should be a number

c++ - 断言和单元测试不兼容吗?