переполнение буфера в c6386 во время записи - PullRequest
0 голосов
/ 06 января 2020
  • Имя функции: expandStack
  • Ввод: указатель на тип стека (стек *)
  • Выход: нет
  • Работа функции: функция расширяет стек
void expandStack(Stack* stack){

    //Check the stack and the array are allocated
    if (stack == NULL ||stack->content == NULL)
    {
        return;
    }

    //Allocating a new sized array (*2 from the previous)
    Element* expandedStack = (Element*)malloc(2 * (stack->size) * sizeof(Element));

    //Case malloc failed
    if (expandedStack == NULL)
    {
        printf("Error! Malloc has failed in file 'stack.c', 'expandStack' function\n");
        return;
    }

    //Updating size field
    stack->size *= 2;

    //Copy values from the previous array to the new array allocated
    for (int i = 0; i <= stack->topIndex; i++)
    {
        expandedStack[i].c = stack->content[i].c;
    }

    //Free old array
    free(stack->content);

    //Point to the new array in the heap
    stack->content = expandedStack;

}

В этой строке: extendedStack [i]. c = stack-> content [i] .c; Я получаю «зеленое предупреждение», говорящее: «переполнение буфера c6386 при записи в« extendedStack »: размер записи составляет 2 * (stack-> size) * sizeof (Element) байтов, но« 2 »байтов может быть записано.

Дело в том, что код работает нормально, он компилируется.

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Я проверил детали ошибки, теоретически «размер» может быть 0, но значение по умолчанию равно 1 и никогда не будет 0.

Я просто добавил, что размер не равен 0 и он исчез.

Спасибо!

0 голосов
/ 06 января 2020

Это предупреждение говорит о том, что буфер может быть переполнен, и пытается предупредить вас, чтобы добавить еще несколько проверок в ваш рабочий код. Это не обязательно ошибка. Если вы переполнили буфер, у вас будет исключение во время выполнения, которое скажет Stack corruption around local variable ...

Отладка программы и посмотрите, есть ли какое-либо исключение как это подходит. Если нет, то вы не превышаете границы буфера.

...