Manajemen array di c [duplikat]

Saya mengalami masalah dalam menggunakan pointer dan array di C, tugasnya sederhana, saya memiliki fungsi yang mengubah angka menjadi array int kemudian mengirim kembali pointer ke array ini. Pada titik ini saya perlu menetapkan pointer ini ke dalam array pointer.

Apa yang saya dapatkan adalah sekumpulan angka secara berurutan, jadi saya kira itu adalah alamat pointer, masalahnya adalah saya perlu melihat nilai yang disimpan dalam array itu, bukan alamatnya...

Kompilasi program tanpa peringatan atau kesalahan.

//-----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 sumber
comment
Apa yang terjadi pada int binaryDigit[8]; ketika fungsinya kembali? (petunjuk: poof!) Anda tidak dapat mengembalikan pointer ke array yang dideklarasikan secara lokal. Sekembalinya, tumpukan fungsi dihancurkan (dirilis untuk digunakan kembali). Array Anda yang dideklarasikan secara lokal berada di tumpukan fungsi itu. Penunjuk yang Anda kembalikan -- sekarang menunjuk ke alamat yang tidak valid -- poof! Berikan binaryDigit sebagai parameter ke fungsi Anda, atau alokasikan dengan mailloc dan kembalikan penunjuknya.   -  person David C. Rankin    schedule 16.02.2020
comment
return binaryDigit memberikan perilaku tidak terdefinisi (alamat yang dikembalikan tidak valid di luar fungsi. Mungkin ada masalah lain, tapi masalah itu sangat menonjol.   -  person John3136    schedule 16.02.2020
comment
pertama: terima kasih!. bagaimana jika saya mendefinisikan binarDigit sebagai variabel global?   -  person Simone Nardone    schedule 16.02.2020
comment
Jika Anda ingin menyimpan pointer yang dikembalikan dalam wadah untuk penggunaan berkelanjutan, (misalnya array pointer), Anda harus mengalokasikan penyimpanan dengan malloc() dan mengembalikan pointer itu. Jangan mendekati global kecuali tidak ada alternatif lain. Dokumentasikan apa yang dilakukan fungsi Anda sehingga pengguna memahami bahwa penyimpanan yang dialokasikan mungkin perlu dikosongkan pada suatu saat.   -  person Martin James    schedule 16.02.2020
comment
Oh.. dan jangan tergoda untuk menggunakan array statis juga. Seperti halnya global, kemungkinan besar Anda akan mendapatkan barang berwarna coklat. Jika Anda malloc ruang, fungsi Anda akan berfungsi dan aman bagi rekursi/thread. Fungsi yang bekerja dengan benar, tidak peduli dari mana/bagaimana mereka dipanggil di ruang pengguna, meninggalkan perasaan kabur yang hangat :) Satu-satunya cara yang 'lebih baik' adalah dengan meneruskan array sebagai argumen, sehingga menghasilkan fungsi masuk kembali yang akan bekerja dengan benar bahkan jika dipanggil oleh pengendali interupsi :)   -  person Martin James    schedule 16.02.2020