Средства тестирования приложений для разработчиков


Сообщения об ошибках и предупреждениях Настройка фильтра - часть 2


выше)

FFM: Freeing Freed Memory Попытка освобождения свободного блока памяти #include <iostream.h> #include <windows.h> int main(int, char **) { int *ptr1 = new int; // int int *ptr2 = ptr1; //ОШИБКА: должен дублировать объект, а не копировать указатель *ptr1 = 10; *ptr2 = 20; cerr << "ptr1" << " is " << *ptr1 << '\n'; cerr << "ptr2" << " is " << *ptr2 << '\n'; delete ptr1; delete ptr2; //FFM: ОШИБКА return(0); }

FIM: Freeing Invalid Memory Попытка освобождения некорректного блока памяти #include <iostream.h> int main(int, char **) { int i; delete[] &i; //FIM: не было операции new. Освобождать нечего! return(0); }

FMM: Freeing Mismatched Memory Сообщение указывает, что программа пробует освобождать память с неправильным ВЫЗОВОМ API для того типа памяти #include <windows.h> int main(int, char **) { HANDLE heap1, heap2; heap1 = HeapCreate(0, 1000, 0); heap2 = HeapCreate(0, 1000, 0); int *pointer = (int *) HeapAlloc(heap1, 0, sizeof(int)); HeapFree(heap2, 0, pointer); //ОШИБКА: неправильное освобождение памяти HeapDestroy(heap1); HeapDestroy(heap2); return(0); }

FMR: Free Memory Read Попытка чтения уже освобожденного блока памяти #include <iostream.h> #include <windows.h> int main(int, char **) { int *ptr = new int[2]; ptr[0] = 0; ptr[1] = 1; delete[] ptr; //ОШИБКА: (специально сделано удаление) for (int i=0; i < 2; i++) { //FMR: ОШИБКА ДОСТУПА К ПАМЯТИ cerr << "element #" << i << " is " << ptr[i] << '\n'; } return(0); }

FMW: Free Memory Write Попытка записи уже освобожденного блока памяти #include <iostream.h> #include <windows.h> int main(int, char **) { int *ptr = new int[2]; ptr[0] = 0; ptr[1] = 1; delete[] ptr; //ОШИБКА: (специально сделано удаление) for (int i=0; i < 2; i++) { ptr[i] *= i; //FMR + FMW: потому что ptr уже удален cerr << "element #" << i << " is " << ptr[i] << '\n'; //FMR } return(0); }

HAN: Invalid Handle Операции над неправильным дескриптором #include <iostream.h> #include <windows.h> #include <malloc.h> int main(int, char **) { (void) LocalUnlock((HLOCAL)3);//HAN: 3 - неправильный указатель return(0); }

HIU: Handle In Use Индикация утечки ресурсов.


- Начало -  - Назад -  - Вперед -