分配失败时释放多维数组
Freeing a multidimensional array when allocation fails
假设我分配了一个二维数组:
int main(void)
{
long int **arr;
int i;
int j;
arr = calloc(2, sizeof(long int *));
if (!arr) {
exit(EXIT_FAILURE);
}
for (i = 0; i < 2; i++) {
arr[i] = calloc(10, sizeof(long int));
if (!arr[i]) {
for (j = i; j > 0; j--) {
free(arr[j]);
}
free(arr);
exit(EXIT_FAILURE);
}
}
}
如果内存分配失败,我是否应该在测试条件中包含 free()
循环
if (!arr[i]) {
for (j = i; j > 0; j--) {
free(arr[j]);
}
free(arr);
exit(EXIT_FAILURE);
}
或者当我不希望程序继续运行时,仅 exit()
失败通常就足够了吗?
if (!arr[i]) {
exit(EXIT_FAILURE);
}
由于您是在分配失败的情况下退出程序,因此这样做没有坏处。您可以使用第二个片段。
C 不直接支持错误处理,即异常处理。在 MSVC 上你可以试试这个(注意这不是 C 标准的一部分):
void exceptionExample() {
int *p = NULL;
__try {
p = (int*)malloc(sizeof(int));
*p = 5;
printf("%d\n",*p);
}
__finally {
free(p);
}
}
假设我分配了一个二维数组:
int main(void)
{
long int **arr;
int i;
int j;
arr = calloc(2, sizeof(long int *));
if (!arr) {
exit(EXIT_FAILURE);
}
for (i = 0; i < 2; i++) {
arr[i] = calloc(10, sizeof(long int));
if (!arr[i]) {
for (j = i; j > 0; j--) {
free(arr[j]);
}
free(arr);
exit(EXIT_FAILURE);
}
}
}
如果内存分配失败,我是否应该在测试条件中包含 free()
循环
if (!arr[i]) {
for (j = i; j > 0; j--) {
free(arr[j]);
}
free(arr);
exit(EXIT_FAILURE);
}
或者当我不希望程序继续运行时,仅 exit()
失败通常就足够了吗?
if (!arr[i]) {
exit(EXIT_FAILURE);
}
由于您是在分配失败的情况下退出程序,因此这样做没有坏处。您可以使用第二个片段。
C 不直接支持错误处理,即异常处理。在 MSVC 上你可以试试这个(注意这不是 C 标准的一部分):
void exceptionExample() {
int *p = NULL;
__try {
p = (int*)malloc(sizeof(int));
*p = 5;
printf("%d\n",*p);
}
__finally {
free(p);
}
}