Управление массивом в c

У меня проблема с использованием указателей и массивов в C, задача проста, у меня есть функция, которая преобразует цифры в массив int, а затем отправляет обратно указатель на этот массив. На данный момент мне нужно назначить этот указатель в массив указателей.

То, что я получаю, - это набор чисел в последовательности, поэтому я полагаю, что это адреса указателей, проблема в том, что мне нужно увидеть значение, хранящееся в этих массивах, а не адреса...

Программа компилируется без предупреждений и ошибок.

//-----Function to convert single digits-----
int* convertToBits(int digitToConvert) 
{
    int binaryDigit[8];
    int k;
    for (int i = 7; i >= 0; i--) {
        k = digitToConvert >> i;

        if (k & 1) {
            binaryDigit[i] = 1;
            //printf("1");
        }
        else {
            binaryDigit[i] = 0;
            //printf("0");
        }
    }

    return binaryDigit;
}

//-----Function to store single digits-----
void setupDigit(int temperature) 
{
    int* displayDigit[4];
    if (temperature >= 0) 
    {
      for (int i = 0; i < 4; i++) {
        //displayDigit[i] = convertToBits(takeSingledDigit(temperature));
          int* pointTo = convertToBits(takeSingledDigit(temperature));
          displayDigit[i] = pointTo;
          for (int j = 0; j < 8; j++) {

              printf("%d", *(displayDigit[i]) + j);

          }
        printf("\n");
        temperature /= 10;
      }
    }
    else 
    {
        for (int i = 0; i < 3; i++) {
            //displayDigit[i] = convertToBits(takeSingledDigit(temperature));
            int* pointTo = convertToBits(takeSingledDigit(temperature));
            displayDigit[i] = pointTo;
            for (int j = 0; j < 8; j++) {

                printf("%d", *(displayDigit[i]) + j);

            }
            printf("\n");
            temperature /= 10;
        }
        displayDigit[3] = minusChar;
    }

person Simone Nardone    schedule 16.02.2020    source источник
comment
Что происходит с int binaryDigit[8];, когда функция возвращается? (подсказка: пуф!) Вы не можете вернуть указатель на локально объявленный массив. По возвращении стек функций уничтожается (освобождается для повторного использования). Ваш локально объявленный массив жил в этом стеке функций. Указатель, который вы возвращаете -- теперь указывает на неверный адрес -- пуф! Либо укажите binaryDigit в качестве параметра вашей функции, либо выделите с помощью mailloc и верните указатель.   -  person David C. Rankin    schedule 16.02.2020
comment
return binaryDigit дает неопределенное поведение (возвращенный адрес недействителен вне функции. Могут быть и другие проблемы, но эта действительно выделяется.   -  person John3136    schedule 16.02.2020
comment
первый: спасибо!. что, если я определю BinarDigit как глобальную переменную?   -  person Simone Nardone    schedule 16.02.2020
comment
Если вы хотите сохранить возвращенный указатель в контейнере для постоянного использования (скажем, в массиве указателей), вы должны выделить память с помощью malloc() и вернуть этот указатель. Не приближайтесь к глобалу, если нет альтернативы. Документируйте, что делает ваша функция, чтобы пользователи понимали, что выделенное хранилище может потребоваться освободить в какой-то момент.   -  person Martin James    schedule 16.02.2020
comment
О.. и не поддавайтесь искушению использовать статический массив. Как и в случае с глобальным, вы, скорее всего, окажетесь в коричневых вещах. Если вы распределите пространство, ваша функция будет работать и будет безопасной для рекурсии/потоков. Функции, которые работают правильно, независимо от того, где и как они вызываются в пользовательском пространстве, оставляют приятное, теплое, нечеткое ощущение :) работать правильно, даже если вызывается обработчиком прерывания :)   -  person Martin James    schedule 16.02.2020