#include <stdio.h>
#include <stdlib.h>
int main() {
// 尝试分配长度为10的字符数组空间
char *arr = (char *)malloc(10 * sizeof(char));
// 检查内存分配是否成功
if (arr == NULL) {
// 如果内存分配失败,输出错误信息并退出程序
fprintf(stderr, "内存分配失败\n");
return 1;
}
// 初始化数组,这里简单将每个元素赋值为字符'a',并注意防止越界访问
for (int i = 0; i < 10; i++) {
arr[i] = 'a';
}
// 使用完数组后,释放分配的内存,防止内存泄漏
free(arr);
arr = NULL;
return 0;
}
异常处理逻辑解释
- 内存分配失败处理:使用
malloc
分配内存后,立即检查返回值是否为NULL
。如果是NULL
,说明内存分配失败,此时通过fprintf
输出错误信息到标准错误流,并使用return
语句退出程序,避免程序继续执行导致未定义行为。
- 越界访问处理:在初始化数组时,使用
for
循环,并将循环条件设置为i < 10
,确保索引i
始终在合法的数组范围内,避免了越界访问。
保证数组初始化安全性和稳定性的方法
- 内存分配检查:每次动态分配内存(如使用
malloc
)后,检查返回值是否为NULL
,这可以及时发现并处理内存分配失败的情况,避免程序因使用空指针而崩溃。
- 边界检查:在对数组进行操作(如初始化、访问等)时,确保索引值在数组的有效范围内。这里在
for
循环中通过i < 10
限制了索引,防止越界访问。
- 内存释放:在数组使用完毕后,使用
free
函数释放分配的内存,并将指针置为NULL
,防止出现悬空指针,避免潜在的内存泄漏和非法访问问题,从而保证了程序的稳定性。