#include <assert.h> #include <cstdio> int main() { int a = 1; assert(a < 1 && "wrong here"); printf("come here\n"); int b = 2; return 0; }
代码如上。。请问在一段程序中,如果中途使用assert(),然后程序直接中断了,那么在assert后面的那些变量是怎么清理的哦?
欢迎选择我的课程,让我们一起见证您的进步~~
没清理, assert实际上没有返回,程序立马就中断了. 程序中断后, 操作系统回收了这个进程的所有资源. 在操作系统的严重, 并不能分辨出来a和"wrong here"到底是什么东西, 无非是一块内存而已.
函数内的变量都是局部变量,变量的内存是在栈上分配的,对于a,b来讲,变量的内存就是一开始分配好的,如果从main函数正常退出,那么就正常释放,如果直接异常退出,也就没有清理的必要了。。可以看看exit,return等函数退出程序的区别。。
a,b
main
exit,return
如果中途使用assert(),然后程序直接中断了,那么在assert后面的那些变量是怎么清理的哦?
由操作系统直接回收这个程序使用的内存。
没清理, assert实际上没有返回,程序立马就中断了. 程序中断后, 操作系统回收了这个进程的所有资源. 在操作系统的严重, 并不能分辨出来a和"wrong here"到底是什么东西, 无非是一块内存而已.
函数内的变量都是局部变量,变量的内存是在栈上分配的,对于
a,b
来讲,变量的内存就是一开始分配好的,如果从main
函数正常退出,那么就正常释放,如果直接异常退出,也就没有清理的必要了。。可以看看
exit,return
等函数退出程序的区别。。由操作系统直接回收这个程序使用的内存。