# V604. Number of iterations in loop equals size of a pointer. Consider inspecting the expression.

Анализатор обнаружил потенциальную ошибку в конструкции, образующий цикл. Цикл подозрителен тем, что количество итераций, которое он выполняет, равно sizeof(указатель). Высока вероятность, что количество итераций должно соответствовать размеру массива, на который ссылается указатель.

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

    char A[N];
    for (size_t i=0; i < sizeof(A); ++i)
      A[i] = 0;

Затем, код программы менялся и массив 'A' стал иметь переменный размер. Код стал некорректен:

    char *A = (char *)malloc(N);
    for (size_t i=0; i < sizeof(A); ++i)
      A[i] = 0;

Теперь выражение "sizeof(A)" возвращает размер указателя, а не размер массива.

Корректный вариант кода:

    char *A = (char *)malloc(N);
    for (size_t i=0; i < N; ++i)
      A[i] = 0;

Данная диагностика классифицируется как:

CWE-682 CERT-ARR01-C

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V604.