Проблема с вашей функцией make array. Когда вызывается функция, стек уменьшается, и регистры и указатели выделяются для сохранения точки, из которой была вызвана эта функция, теперь вы отправляете n по значению, а ваша функция создает место в стеке для заполненного вами массива. - НО - когда ваша функция возвращается - указатель стека возвращается обратно к вызывающей стороне (если ваша функция имеет возвращаемое значение, она будет сохранена в заранее выделенном месте, но кроме этого все остальные данные функции в стеке недоступны .).
Таким образом, в общем, если вы хотите, чтобы функция создала массив, который можно было использовать позже, он должен быть размещен в куче, вы можете либо вернуть int *, либо отправить foo (int **) в функцию, которая будет содержать add , нового выделенного массива.
другой вариант - выделить этот массив [N] в вашем main и отправить функцию foo (int arr [], int n, size_t size). Поскольку массив был выделен вызывающей стороной в main - эта память будет действительна в течение всей жизни основной функции.
т. Вариант 1)
int main()
{
int num;
int* array;
printf("Enter a number to check: ");scanf("%d",&num);
array = make_array(num, N);
if(palindrome(array, N))
printf("It is palindrome");
else
printf("It is not palindrome");
free(array); /*free heap allocation */
}
int* make_array(int n, size_t size)
{
int* arr;
int digit ,i=0;
arr = malloc(sizeof(int)*size);
if(NULL == arr)
{
return NULL; /* malloc failed*/
}
while(n>0 && i<size){
digit=n%10;
arr[i]=digit;
n/=10;
i++;
}
printf("Array: ");
for(i=0; i<N; i++)
printf("%d ",arr[i]);
return arr;
}
или 2)
int main()
{
int num;
int array[N];/*array saved on stack in main function */
printf("Enter a number to check: ");scanf("%d",&num);
make_array(array,num, N);
if(palindrome(/*Don't know what should I write here*/))
printf("It is palindrome");
else
printf("It is not palindrome");
}
void make_array(int* arr, int n, size_t size)
{
int digit,i=0;
if(NULL == arr)/*if arr is not a valid pointer*/
{
return;
}
while(n>0 && i<size){
digit=n%10;
arr[i]=digit;
n/=10;
i++;
}
printf("Array: ");
for(i=0; i<N; i++)
printf("%d ",arr[i]);
}