Что инструменты C/C++ могут проверить на переполнение буфера? [закрытый]

Вы можете просматривать циклы, чтобы обновлять их вместе.

Вот фрагмент кода из документации ChartJS :

function addData(chart, label, data) {
    chart.data.labels.push(label);
    chart.data.datasets.forEach((dataset) => {
        dataset.data.push(data);
    });
    chart.update();
}

function removeData(chart) {
    chart.data.labels.pop();
    chart.data.datasets.forEach((dataset) => {
        dataset.data.pop();
    });
    chart.update();
}

Вы также можете проверить и посмотреть, обращаетесь ли вы к нужной переменной. Вы пытаетесь заменить весь объект data в наборе данных или пытаетесь обновить атрибут dataset.data?

22
задан MrValdez 3 October 2008 в 14:40
поделиться

13 ответов

В Windows для утечек/переполнения буфера памяти и другого обнаружения ошибки периода выполнения можно использовать:

, я думаю они стоящий их цены, если у Вас есть крупные проекты та очистка потребности.

0
ответ дан 29 November 2019 в 03:41
поделиться

Я рекомендовал бы свободный "leakfinder" инструмент на CodeProject Jochen Kalmbach. Дополнительную информацию см. в моем сообщении на этом потоке (и другие ответы) на этом вопрос об утечке памяти

1
ответ дан 29 November 2019 в 03:41
поделиться

Можно попробовать Визуальный Детектор Утечки - я использовал его сам, и это - первая вещь, которую я рекомендовал бы для обнаружения утечки мадам.

1
ответ дан 29 November 2019 в 03:41
поделиться

Visual Studio имеет / флаг компилятора GS, который добавляет защиту от переполнения буфера. Есть ли какие-либо другие?

1
ответ дан 29 November 2019 в 03:41
поделиться

Мой голос переходит к Рациональному, Очищают. Чрезвычайно мощный с ценой для соответствия. Быстро справляется большого количества проблем и может действительно заплатить за себя. Кроме того, доступно на большинстве *, отклоняют. Не уверенный в Windows, все же.

2
ответ дан 29 November 2019 в 03:41
поделиться

Компонент BoundsChecker Devpartner Compuware делает это очень хорошо с точки зрения динамического выполнения. Для статического испытания я рекомендовал бы , линт ПК и линт гибкого провода связали [до 112] визуальный линт Riverblade для удобства использования и создания отчетов. Если бы Вам вручили новую кодовую базу, я рекомендовал бы начать со статическим анализом с довольно свободными правилами, таким образом, Вы ловите просто противный материал. Когда кодовая база улучшается, Вы можете tightent набор правила.

, Если необходимо сделать это на Windows Mobile / Windows CE, проверьте , код Entrek умыкает

Другой инструмент, чтобы рассмотреть, превращает ли код его в поле, AQtrace, который в основном анализирует катастрофические отказы на пользовательских машинах и отправляет Вам детали. (На всякий случай все, что boundchecking, purifcation, linting, valgrinding и т.д. промахи что-то)

2
ответ дан 29 November 2019 в 03:41
поделиться

Проблема с / GS - он, на самом деле не просканирует для ошибок. Это просто предупредит Вас после факта. Кажется на поиск инструмента, который просканирует существующий код для потенциального буфера по/под выполнениям.

А хороший инструмент для этого и другие дефекты, являются инструментом Microsoft PreFAST.

информация здесь

3
ответ дан 29 November 2019 в 03:41
поделиться

MS:

3
ответ дан 29 November 2019 в 03:41
поделиться

Начните работу электрический забор , это - дизайн только для переполнения буфера! Это не замедляет сам код (но замедляет выделение/освобождение). Это работает и Linux и окна.

Это работает путем добавления сегмента без доступа для чтения или доступа для записи прежде и после каждого выделенного места. Попытка получить доступ к этой памяти заканчивается как отказ сегментации на UNIX и нарушении памяти (или что-то подобное) в Windows.

4
ответ дан 29 November 2019 в 03:41
поделиться

IBM Очищает, сделает это, Вы запускаете свое приложение под нею, и она даст Вам сообщение обо всех ошибках (включая другие).

Для уничтожения утечек памяти используйте UMDH - запускает приложение, берут снимок памяти, выполняют его снова, снимок и затем используют различный инструмент для наблюдения, выделения, сделанные начиная с первого показа через (обратите внимание, что необходимо запустить приложение однажды и взять снимки как лучше всего, Вы можете).

8
ответ дан 29 November 2019 в 03:41
поделиться

Рассмотрите использование более современных структур данных как способа избежать переполнения буфера. Чтение в станд.:: строка не переполнится, и станд.:: векторы намного более безопасны, чем массивы. Я не знаю то, что Ваше приложение, и возможно, что необработанные буферы используются, потому что Вам нужна скорость, но более распространено, что они используются, потому что это - то, чем исходные программисты были довольны.

Поиск утечек памяти с упомянутыми инструментами является хорошей идеей, но они не могут найти все потенциальные утечки, в то время как использование стандартных строк и контейнерных классов может устранить проблемы, Вы не поняли, что имели.

10
ответ дан 29 November 2019 в 03:41
поделиться

На Linux я использовал бы Valgrind.

26
ответ дан 29 November 2019 в 03:41
поделиться

Я удивлен, что никто не упомянул Application Verifier (бесплатно!) в Windows. Visual Leak Detector (упомянутый в другом ответе) абсолютно великолепен для отслеживания многих типов утечек памяти, но Application Verifier - лучшая собака для отслеживания ошибок памяти, таких как переполнение буфера, двойное освобождение и использование буфера после освобождения (плюс многие, многие другие).

Edit: И им очень и очень легко пользоваться.

3
ответ дан 29 November 2019 в 03:41
поделиться