博客
关于我
(转)考虑错误情况
阅读量:792 次
发布时间:2023-01-23

本文共 1254 字,大约阅读时间需要 4 分钟。

考虑错误情况处理

错误处理的真正含义

错误处理是编程中的一大挑战。很多人对“错误处理”有误解,他们认为它仅限于应对一些特殊情况,比如内存分配失败或函数调用异常。然而,实际上,错误处理是程序的核心 competitiveness,它涉及如何预见系统可能面临的各种异常,并确保程序在这些情况下依然可以稳定地运行。

在构建一个需要高可用性的应用程序时,您需要考虑到系统可能遇到的各种异常。无论是内存耗尽、文件未找到、网络连接中断,还是预期中的成功操作出错,程序都必须有一个完整的错误处理机制来应对这些情况。

此外,错误处理不仅仅是应对失败,还包括如何处理成功的情况。很多人容易忽视这一点,但成功路径同样需要处理,因为它们也可能因系统环境的变化而出现问题。


多个API约定的问题

在编程中,可能会混用不同的API约定,这将导致各种问题。例如:

  • 返回值的不一致性

    Windows API中有些函数返回BOOL值,而COM函数返回HRESULT。这种不一致可能导致 programmer混淆。例如,FAILED(Status)宏会错误地将0解释为失败。

  • 错误信息的不明确性

    有些API不会提供详细的错误信息,只返回错误码。程序员需要通过GetLastError或类似的函数来获取更多信息。

  • 内存分配的问题

    无论是使用HeapAlloc还是malloc都需要检查返回的NULL指针是否有效。检查这一步是程序稳定性的基础。


  • 正确处理错误的两个关键原则

  • 总是检查返回状态

    program在临IFS的任何地方都必须检查返回值。例如,GetWindowsDirectory返回0表示失败,而ReadFile失败后缓冲区可能包含未初始化的值。

  • 总是检查内存分配

    无论是使用哪种内存分配函数,都需要确保存在返回的指针。例如,malloc返回NULL表示失败,而new可能在内存耗尽时引发异常。


  • 常见错误示例

  • 不检查函数返回值

    例如:

    TCHAR cDriveLetter;_getWindowsDirectory(szWindowsDir, MAX_PATH);if (buffer[0] == 0) { // WRONG!!! }

    如果GetWindowsDirectory失败,szWindowsDir可能是一个未初始化的空字符串,导致cDriveLetter为负值。

  • 错误处理的做法

    应采取以下措施:

    • 定义清晰的错误处理约定,确保程序员知道如何应对不同类型的错误。
    • 使用宏或函数来简化错误处理。例如,FAILED(hr)宏会检查HRESULT是否为负值。
    • 在内存分配失败时,删除新分配的指针以防止内存泄漏。

  • 小结

    错误处理是程序可靠性的核心。编写高质量代码的程序员必须从一开始就预见各种可能的错误,并设计相应的处理机制。以下几点是成功的关键原则:

    • 定义清晰的错误处理约定。
    • always check返回状态和内存分配。
    • 避免混用不同的API约定。

    只有在错误处理方面下足功夫,才能确保程序在各种异常情况下都能稳定运行。

    转载地址:http://zteyk.baihongyu.com/

    你可能感兴趣的文章
    Effective Java 读书笔记
    查看>>
    访问servlet时弹出文件下载框解决方法
    查看>>
    IDEA-@Slf4j和log标签&@Data(Lombok)无效
    查看>>
    SpringCloud-Eureka报错 Error creating bean with name解决
    查看>>
    Thymeleaf 生成下标,索引,使用Stat变量
    查看>>
    RAFT 拜占庭将军 共识算法
    查看>>
    UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
    查看>>
    cmd编译.java文件 : java:720: 错误: 编码GBK的不可映射字符 Why ? ? ? ?
    查看>>
    Android 架构组件 – 让天下没有难做的 App
    查看>>
    能解决数据可视化大屏需求的3款可视化工具
    查看>>
    多代理区块链框架客户端的操作
    查看>>
    一些技术博客
    查看>>
    第01问:MySQL 一次 insert 刷几次盘?
    查看>>
    优先级队列2
    查看>>
    TiKV 源码解析系列文章(十三)MVCC 数据读取
    查看>>
    Android 开发常用的工具类(更新ing)
    查看>>
    HTTP 错误 500.21 - Internal Server Error 发布网站遇到这个错误
    查看>>
    初次安装webpack之后,提示安装webpack-cli
    查看>>
    使用FileZilla,FTP登录出现错误:FileZilla状态: 不安全的服务器,不支持 FTP over TLS
    查看>>
    Hbase压力测试
    查看>>