C语言 : How is it possible for your program to continue running for a little bit after an "assert()" has failed?

标签 c assertions

我目前(不要问为什么 :P)正在实现我自己的 malloc() 和 free() 版本,并且有意在 free() 的第一行放置一个 assert(0) 用于当前调试目的。

驱动程序正在测试这些 malloc() 和 free() 的随机序列,以测试我的实现的正确性。

但是,当我运行驱动程序时,外壳会打印出“Assertion '0' failed”,继续运行一段时间,然后打印出“Aborted”。实际上,它看起来甚至可以在报告断言失败和最终报告程序已中止之间多次调用 malloc()。我确信这一点,因为我在代码中放置了某些 printf 语句以打印出某些变量以用于调试目的。

关于实现 malloc() 和 free(),我根本不寻求任何帮助。只是想知道即使在报告断言失败后程序似乎继续运行一小段时间(甚至可能调用其他用户定义的函数)是什么意思。

最佳答案

如果您看到“断言失败”,然后是调试打印,然后是退出,则有两种明显的可能性。

一个是断言消息和调试打印将进入两个不同的缓冲输出流(例如 stderr 和 stdout),它们不会按照填充顺序刷新。

另一个是多个执行线程正在调用 malloc()。

关于C语言 : How is it possible for your program to continue running for a little bit after an "assert()" has failed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844140/

相关文章:

phpunit - 如何替换phpunit断言消息?

system-verilog - 我可以在生成 block 中使用绑定(bind)吗

c - 为什么 libcurl 在清理调用后仍然留下可访问的 block ?

c - 外部常数变量

Try 中的 Java 断言与多个 catch

c++ - 当 C++ 断言失败时,如何自动创建小型转储?

java - SonarQube 针对 junit 和 Mockito 问题“向此测试用例添加至少一个断言”

c - C 中的指针转换和 "free"

c - 如何在不知道总长度的情况下在C中留下填充文本

c - 是否可以仅通过代码以管理员身份运行