# Inizializzazione vettori

**URL:** <https://forum.arduino.cc/t/inizializzazione-vettori/1067254>\
**Category:** Software\
**Created:** [December 19, 2022, 5:33pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254 "2022-12-19T17:33:53Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![claudio\_293](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/claudio_293/32/889966_2.png) [@claudio\_293](https://forum.arduino.cc/u/claudio_293)\
**Post date:** [December 19, 2022, 5:33pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/1 "2022-12-19T17:33:53Z")

</div>

salve  
mi succede questa cosa "strana" che mi fatto un pò ammattire:  
in un mio progetto uso dei vettori globali, li definisco ma non li inizializzo (erroneamente!).  
Mando in run il progetto (alcuni di questi vettori vengono valorizzati).  
Faccio delle modifiche al progetto.  
Lo mando nuovamente in run (il contenuto dei vettori non viene valorizzato).  
Nei vettori mi ritrovo i vecchi valori.  
Sembrerebbe che Arduino, al momento del run non li inizializzi a 0.  
Credo che succeda la stessa cosa anche per puntatori, variabili generiche, ...  
Se così è bisogna stare molto attenti!  
Ho preso un abbaglio oppure è così? 🙄  
grazie

---

<div class="post-metadata">

**Author:** ![gpb01](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gpb01/32/830685_2.png) [@gpb01](https://forum.arduino.cc/u/gpb01)\
**Post date:** [December 19, 2022, 5:48pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/2 "2022-12-19T17:48:09Z")

</div>

MAI fidarsi dell'inizializzazione di variabili, vettori e quant'altro dato che la cosa dipende da molti fattori (_... anche dal compilatore_), per cui ... se il valore iniziale può essere problematico, per sicurezza, inizializzare SEMPRE tutto quello che va inizializzato.

Guglielmo

---

<div class="post-metadata">

**Author:** ![Maurotec](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maurotec/32/213982_2.png) [@Maurotec](https://forum.arduino.cc/u/Maurotec)\
**Post date:** [December 19, 2022, 5:52pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/3 "2022-12-19T17:52:27Z")

</div>

Ma è meglio che posti il codice per evitare di fare confusione.  
C'è chi usa il termine definire "li definisco" in modo improprio, io questo termine in programmazione proprio non lo mai usato, posso tollerarlo in merito alle classi C++.

In C/C++ esistono le dichiarazioni e le dichiarazioni e inizializzazione esplicita. Le variabili globali sono sempre inizializzate al loro valore di default, C'è da vedere il tipo di dato usato nella dichiarazioni dei vettori.

Ciao.

---

<div class="post-metadata">

**Author:** ![Datman](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/datman/32/219519_2.png) [@Datman](https://forum.arduino.cc/u/Datman)\
**Post date:** [December 19, 2022, 6:20pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/4 "2022-12-19T18:20:40Z")

</div>

> [@claudio\_293](#):
>
> li definisco ma non li inizializzo (erroneamente!)

Vuoi dire che li dichiari ma non assegni un valore?

---

<div class="post-metadata">

**Author:** ![gpb01](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gpb01/32/830685_2.png) [@gpb01](https://forum.arduino.cc/u/gpb01)\
**Post date:** [December 19, 2022, 7:16pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/5 "2022-12-19T19:16:10Z")

</div>

@Datman: Esatto ... ora, ad esempio, gcc su AVR, inizializza a 0 le variabili statiche ed a NUL i pointer statici, mentre NON inizializza tutto ciò che è locale ... ~~ma non è detto che tutti i compilatori e su tutte le piattaforme si riscontri lo stesso comportamento~~ , per cui, quando si ha bisogno di essere SICURI che una variabile all'inizio abbia un certo valore ...  
... inizializzarla SEMPRE 😉

Guglielmo

---

<div class="post-metadata">

**Author:** ![Datman](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/datman/32/219519_2.png) [@Datman](https://forum.arduino.cc/u/Datman)\
**Post date:** [December 19, 2022, 8:10pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/6 "2022-12-19T20:10:13Z")

</div>

Sì, io considero sempre che contengano valori casuali. Se è importante che una variabile stia a zero, la imposto io.

---

<div class="post-metadata">

**Author:** ![Standardoil](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/standardoil/32/1235732_2.png) [@Standardoil](https://forum.arduino.cc/u/Standardoil)\
**Post date:** [December 19, 2022, 8:15pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/7 "2022-12-19T20:15:01Z")

</div>

> [@gpb01](#):
>
> ma non è detto che tutti i compilatori e su tutte le piattaforme si riscontri lo stesso

Oh no....

Invece è detto

Da K&R  
Fa parte dello standard

---

<div class="post-metadata">

**Author:** ![claudio\_293](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/claudio_293/32/889966_2.png) [@claudio\_293](https://forum.arduino.cc/u/claudio_293)\
**Post date:** [December 19, 2022, 8:19pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/8 "2022-12-19T20:19:16Z")

</div>

Grazie Datman, normalmente cerco di farlo.  
Questa volta me ne ero scordato e ....  
Quello che è strano è che le stesse variabili (in questo caso un vettore di interi) è stato allocato esattamente dove prima e quindi mi ritrovavo dei valori non casuali ma bensì quelli precedenti.  
È questo che mi ha fregato.  
Murphy non perdona.  
Grazie a tutti

---

<div class="post-metadata">

**Author:** ![gpb01](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gpb01/32/830685_2.png) [@gpb01](https://forum.arduino.cc/u/gpb01)\
**Post date:** [December 19, 2022, 8:21pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/9 "2022-12-19T20:21:51Z")

</div>

... vero ... 😁

> ## 4.9 Initialization
> 
> External and static variables are initialized to 0, while automatic and register variables are initialized to garbage values.
> 
> External and static variables can only be initialized with a constant expression. Initialization is only performed once, upon the first execution of their block/function.
> 
> Arrays can be initialized with a given number of empty slots, or with actual values.

Ho corretto il post #5 🙂

Guglielmo

---

<div class="post-metadata">

**Author:** ![Standardoil](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/standardoil/32/1235732_2.png) [@Standardoil](https://forum.arduino.cc/u/Standardoil)\
**Post date:** [December 19, 2022, 8:21pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/10 "2022-12-19T20:21:54Z")

</div>

Quello che dici non è possibile

Dice il saggio: vedere programma trovare bug

---

<div class="post-metadata">

**Author:** ![claudio\_293](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/claudio_293/32/889966_2.png) [@claudio\_293](https://forum.arduino.cc/u/claudio_293)\
**Post date:** [December 19, 2022, 8:28pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/11 "2022-12-19T20:28:26Z")

</div>

Non so se riuscirò a replicarlo.  
Domani ci provo.  
Grazie

---

<div class="post-metadata">

**Author:** ![claudio\_293](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/claudio_293/32/889966_2.png) [@claudio\_293](https://forum.arduino.cc/u/claudio_293)\
**Post date:** [December 19, 2022, 9:03pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/12 "2022-12-19T21:03:16Z")

</div>

Penso che potrebbe dipendere da come è dove sono allocati l'area dati e quella del codice.  
Se i dati sono prima del codice (e non li modifico aggiungendo o eliminandone qualcuno) ed il sistema non li inizializza mi sembrerebbe possibile.  
Io non toglievo l'alimentazione, ma solo ricompila e run.  
Dico questo da ignorante, non conosco com'è organizzata la memoria (e poco anche il resto😏)

---

<div class="post-metadata">

**Author:** ![claudio\_293](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/claudio_293/32/889966_2.png) [@claudio\_293](https://forum.arduino.cc/u/claudio_293)\
**Post date:** [December 20, 2022, 9:35am UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/14 "2022-12-20T09:35:17Z")

</div>

ciao Standardoil.  
Ho riprodotto il "problema".  
Si presenta, almeno apparentemente, **solo con vettori** dichiarati all'interno di una funzione (ed immagino quindi allocati nello stack).  
Ho estratto un codice minimale, il problema ovviamente si presenta solo riavviando lo sketch e non dopo un OFF/ON:

```cpp

char glob[10];

void setup() 
{
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);

// questo funziona correttamente ---------------
  Serial.println(glob); // dopo OFF/ON stampa porcherie, giustamente
                                               // dopo un RIAVVIO invece non stampa nulla, qualcuno ne inizializza il contenuto
  delay(1000);
  strcpy(glob, "ABCDEF");
  Serial.println(glob);
  delay(1000);

  pippo();
}

void loop() 
{
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  delay(200);
}

void pippo(void)
{
char sGxx[10];
int nInt;
// questo NON funziona correttamente ---------------
  Serial.println(sGxx);
  delay(1000);
  strcpy(sGxx, "98765");
  Serial.println(sGxx);

// questo funziona correttamente ---------------
  Serial.println(nInt);
  delay(1000);
  nInt = 1234;
  Serial.println(nInt);
}

```

Sicuramente sbaglio io, comunque è un comportamento un pò "singolare" ...

---

<div class="post-metadata">

**Author:** ![Standardoil](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/standardoil/32/1235732_2.png) [@Standardoil](https://forum.arduino.cc/u/Standardoil)\
**Post date:** [December 20, 2022, 9:48am UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/15 "2022-12-20T09:48:18Z")

</div>

> [@claudio\_293](#):
>
> in un mio progetto uso dei vettori globali, li definisco ma non li inizializzo (erroneamente!).

come vedi...

---

<div class="post-metadata">

**Author:** ![nid69ita](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/nid69ita/32/901258_2.png) [@nid69ita](https://forum.arduino.cc/u/nid69ita)\
**Post date:** [December 20, 2022, 3:51pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/16 "2022-12-20T15:51:49Z")

</div>

> [@claudio\_293](#):
>
> **solo con vettori** dichiarati all'interno di una funzione (ed immagino quindi allocati nello stack

regola del C (quindi anche C++), tutto quello che è nello stack non viene inizializzato, quindi variabili (o vettori) dichiarati nelle funzioni (variabili locali) non sono inizializzati. Nessuna "stranezza"

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [June 18, 2023, 3:52pm UTC](https://forum.arduino.cc/t/inizializzazione-vettori/1067254/17 "2023-06-18T15:52:40Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
