MISRA C:2012 Rule 21.3

Функции выделения и отмены выделения памяти <stdlib.h> не может использоваться

Описание

Определение правила

Функции выделения и отмены выделения памяти <stdlib.h> не должны использоваться.

Объяснение

Использование стандартных программ выделения и удаления памяти может вызвать неопределенное поведение. Для образца:

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

  • Вы используете указатель, который указывает на свободное место памяти.

Реализация Polyspace

Шашечные флаги используют calloc, malloc, realloc, aligned_alloc и free функций.

Если вы задаете макросы с такими же именами, как и эти динамические функции выделения памяти кучи, и расширяете макросы в коде, это правило нарушается. Принято, что правило 21.2 не нарушается.

Дополнительное сообщение в отчете

  • Макрос < имя > не должен использоваться.

  • Идентификатор XX не должен использоваться.

Поиск и устранение проблем

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

#include <stdlib.h>

static int foo(void);

typedef struct struct_1 {
    int a;
    char c;
} S_1;

static int foo(void) {

    S_1 * ad_1;
    int  * ad_2;
    int  * ad_3;

    ad_1 = (S_1*)calloc(100U, sizeof(S_1));        /* Non-compliant */
    ad_2 = malloc(100U * sizeof(int));             /* Non-compliant */
    ad_3 = realloc(ad_3, 60U * sizeof(long));      /* Non-compliant */

    free(ad_1);                                    /* Non-compliant */
    free(ad_2);                                    /* Non-compliant */
    free(ad_3);                                    /* Non-compliant */

    return 1;
}

В этом примере правило нарушается, когда функции malloc, calloc, realloc и free используются.

Проверяйте информацию

Группа: Стандартные библиотеки
Категория: Требуемая
Категория AGC: Требуется
Введенный в R2014b