- Имя функции: 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 »байтов может быть записано.
Дело в том, что код работает нормально, он компилируется.