不调用libusb_exit()会产生什么后果
What are consequences of not calling libusb_exit()
我正在编写一个与USB视频播放控制器交互的用户空间程序。我是用C++编程的,这个程序打算在Linux上运行。在学习libusb手册时,我发现了void libusb_exit ( struct libusb_context * ctx )
函数。
描述中写道:
取消初始化libusb。
应在关闭所有打开的设备后和应用程序终止。
该手册没有解释为什么需要它。我开始好奇在不调用libusb_exit()
的情况下终止一个初始化并使用libusb的程序会产生什么后果。有人能解释一下,如果由于某些原因,我的程序在终止前无法调用libusb_exit()
,会发生什么糟糕的事情吗?它会导致系统资源泄漏吗?
它涉及上下文。
只要您有一个单用户应用程序,您通常最终会使用默认上下文。每当用户的会话被破坏时,也就是说,当你的应用程序被关闭时,这个就死了
还要注意的是,如果你的应用程序崩溃,你不能因为不调用libusb_exit
而泄漏(好吧,即使泄漏是可能的,泄漏的内存也会在崩溃后立即释放,所以我不会更关心崩溃本身的原因)。
每当您有多个会话时,问题就会出现
请参阅此处和此处了解更多详细信息
如果在这种情况下调用libusb_exit
失败,并且从应用程序的角度来看,会话处于已释放状态,那么您肯定会泄漏内存,因为libusb实际上不会破坏上下文。事实上,在这种情况下,软件不会关闭,但内存仍在使用中,无法再访问,因为您没有调用libusb_exit
来释放它。
这就是为什么文档建议每次想要销毁上下文时都调用libusb_exit
,无论是否为默认上下文。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 使用 nullptr 作为 std::unordered_map 的键有什么后果吗?
- 在C++中使用异常的可能的错误处理策略是什么,它们的后果和影响是什么
- 我什么时候应该使用删除?(在动态创建的2D数组之后未删除的后果)
- C 指针初始化的不良初始化可能是什么后果
- 内存泄漏的长期后果是什么?
- 不调用libusb_exit()会产生什么后果
- 强制QObject作为QWidget的父级的后果是什么?
- 有一个指向此的静态指针会产生什么后果
- 在c++ 0x中忽略窄化转换的后果是什么?
- c++ fprintf函数调用中格式/参数类型不匹配的可能后果是什么?
- 父类有虚方法而派生类没有虚方法的后果是什么?
- "screwing up"赋值运算符的后果是什么?
- 在VisualStudio2010中混合使用异常处理模型会产生什么后果
- 在条件语句中简单检查指针值的后果是什么?