84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
#include #include 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
等函数退出程序的区别。。由操作系统直接回收这个程序使用的内存。