Может ли очистить выяснить нарушение доступа к переменным стека?

В настоящее время я использую Valgrind для проверки утечки памяти и использую Purify в качестве альтернативы. Valgrind может обнаружить нарушение прав доступа к массиву, созданному в куче, но не в стеке.

char* a = static_cast<char*>(malloc(sizeof(char) * 5));
a[7] = 'c';
printf("%c\n", a[7]);
free(a);

Valgrind указывает на неправильную запись и чтение в приведенном выше коде, но не в следующем коде.

char a[5] = {0};
a[7] = 'c';
printf("%c\n", a[7]);

Может ли Purify определить нарушение прав доступа к обоим блокам кода?

0

Решение

Согласно руководству пользователя (ftp://ftp.software.ibm.com/software/rational/docs/v2003/purify/html/ht_m_sbr.htm) а также (ftp://ftp.software.ibm.com/software/rational/docs/v2003/purify/html/ht_m_sbw.htm), Purify может обнаружить как чтение, так и запись границы стека.

Однако, проверяя ваши реальные примеры, только нарушение данных кучи было обнаружено и Purify. Я тестировал только последнюю версию от IBM (7.0.1), как для Linux, так и для Solaris.

Вы можете посмотреть на -fsanitize = address для gcc 4.8 и выше.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]