Следующая функция «increment» добавляет 1 к числу, представленному в виде массива.Возврат массива переменной длины из функции
int* increment(int array[], int size, int *sizeLen)
{
int temp[size+1];
int carry = 0;
carry = (array[size-1]+1)/10;
temp[size] = (array[size-1]+1)%10;
for(int i=size-2;i>=0;i--)
{
temp[i+1] = (array[i] + carry)%10;
carry = (array[i]+carry)/10;
}
if(carry)
{
temp[0] = 1;
*sizeLen = size+1;
return temp;
}
else
{
*sizeLen = size;
return (temp+1);
}
}
int main()
{
int array[] = {9,9,9};
int length;
int *res = increment(array, sizeof(array)/sizeof(int), &length);
for(int i=0;i<length;i++)
{
cout << res[i] << " ";
}
}
Я знаю, что GCC поддерживает variable length arrays и они хранятся в стеке. Я ожидаю, что темп исчезнет из области действия после завершения этой функции, и попытка распечатать массив в главном окне должна отображать значения мусора. Но в моем случае печатаются фактические значения. Когда массив переменной длины, объявленный в функции, выходит из области видимости?
Что вы видите - это неопределенное поведение. Это ловушка C. –
C++ даже не поддерживает VLA, а ваш код в основном C. Используйте контейнеры и итераторы. – Downvoter
Я не заметил тега. Почему вы используете VLA в коде C++ (расширение, нестандартное)? Ваш вопрос действительно о C? Уточните, пожалуйста. Это разные языки. – StoryTeller