C 错误处理学习笔记
概述
在 C 语言中,当程序执行发生错误时会出现一些错误信息。这些错误信息可以被程序员捕获并做出相应的处理。C 语言中的错误处理主要包括两种类型:
-
编译时错误: 在编译程序时,如果代码中存在语法错误,则编译器会报告这些错误,并且程序无法生成可执行文件。
-
运行时错误:在程序运行过程中,如果程序发生错误,例如除数为0、数组越界等错误,则程序会崩溃或产生意外结果。
本文主要讨论 C 语言中的运行时错误以及如何进行错误处理。
错误处理函数
在 C 语言中,我们可以通过设置错误处理函数来对程序中的错误进行处理。C 语言提供了几个内建的错误处理函数,分别是 abort()
、exit()
和 assert()
函数。
abort()
函数
abort()
函数用于异常终止程序的执行,即使程序没有正常的退出方式也能保证资源得到正确的释放。当程序出现无法继续执行的错误,可以使用 abort()
函数来强制中止程序的执行。
cCopy Code#include <stdlib.h>
void abort(void);
exit()
函数
exit()
函数用于正常终止程序的执行。当程序执行完所有的语句后,可以使用 exit()
函数退出程序,同时释放已经分配的资源。
cCopy Code#include <stdlib.h>
void exit(int status);
assert()
函数
assert()
函数用于检查程序中的错误。当程序中出现错误时,assert()
函数会终止程序的执行,并打印出错误信息。
cCopy Code#include <assert.h>
void assert(int expression);
错误示例
以下是一些常见的运行时错误示例:
除数为零
cCopy Code#include <stdio.h>
int main()
{
int a = 10;
int b = 0;
int c = a / b; // 除数为零,会导致程序崩溃
printf("c = %d", c);
return 0;
}
数组越界
cCopy Code#include <stdio.h>
int main()
{
int a[10];
a[11] = 1; // 数组越界,会导致程序崩溃
return 0;
}
空指针引用
cCopy Code#include <stdio.h>
int main()
{
int* p = NULL;
int a = *p; // 空指针引用,会导致程序崩溃
printf("a = %d", a);
return 0;
}
以上是 C 语言中的运行时错误示例,我们可以使用前面介绍的错误处理函数来处理这些错误。