Проверка корректности освобождения ресурсов, локальных для функции на языке C - page 11

Проверка корректности освобождения ресурсов, локальных для функции на языке C
11
Пример 3.
Использование ресурса (переменной типа
FILE *
) после
его освобождения и попытка повторного освобождения. Обе ошибки
обнаруживаются корректно.
int read_file(char *path)
{
FILE *fd = fopen(path, "r");
int a = 1;
fclose(f);
char first = fgetc(f);
if (fd) {
a = 2;
fclose(fd);
}
}
Пример 4.
Использование и освобождение ресурса (номера фай-
лового дескриптора) в случае ошибочного выделения. Обе ошибки
обнаруживаются корректно.
int read_file(char *path)
{
int fd = open(path, O_RDONLY);
int a = 1;
if (fd == -1) {
a = 2;
char ch;
read(fd, &ch, 1);
switch(a) {
case 3: break;
case 2: close(fd); break;
case 1: break;
}
}
}
Пример 5.
Использование ресурса после освобождения на итера-
ции цикла, отличной от первой. Такая ошибка не может быть обна-
ружена в силу ограниченной обработки циклов.
void CannotHandle()
{
int *ptr = malloc(sizeof(int));
int c = 2;
while (c < 4) {
if (c == 3) {
free(ptr);
*ptr = 3;
}
c++;
}
}
1...,2,3,4,5,6,7,8,9,10 12
Powered by FlippingBook