DOMANDA Dichiarazione di vettore fuori dal main

Haidakan

Nuovo Utente
125
2
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
HDD
TOSHIBA DT01ACA100
RAM
8 GB DDR3
GPU
Nvidia Geforce GT 610
Audio
Integrata
Monitor
LG L1960TQ
PSU
Da 500 W
OS
Windows 8.1 Pro (64 bit)
salve, come da titolo, dovrei dichiarare un vettore fuori dal main, quindi globale, il punto e' che se l'indice del vettore e' una variabile anch'essa globale il compilatore mi dice che non e' una costante. Non capisco, facendo le stesse cose nel main funziona benissimo, e l'indice non e' mica una costante. Grazie in anticipo :)
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Del tipo:
C++:
const int index = 5;
int array[index];
o
C++:
int index;
int array[index];

int main()
{
    std::cin >> index;
}
Perché il secondo ha un grave errore di fondo
 

Haidakan

Nuovo Utente
125
2
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
HDD
TOSHIBA DT01ACA100
RAM
8 GB DDR3
GPU
Nvidia Geforce GT 610
Audio
Integrata
Monitor
LG L1960TQ
PSU
Da 500 W
OS
Windows 8.1 Pro (64 bit)
Ah, del tipo?
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Ah, del tipo?
Penso tu sappia che le istruzioni sono eseguite in ordine di apparenza. Quindi prima dichiari index, poi il vettore con indice index, poi dai il valore a index.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Ah, del tipo?
La variabile index non è inizializzata con un valore. Quindi ha un valore "casuale".
Cosa non vera per le variabili dichiarate come static o global; tuttavia mi sembra dipenda dallo standard.
Le variabili locali invece danno luogo ad un "undefined behavior", in quanto il valore non è conosciuto (probabilmente un utilizzo come il tuo porta ad un crash).

Inviato da ONEPLUS A5000 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
La variabile index non è inizializzata con un valore. Quindi ha un valore "casuale".
Cosa non vera per le variabili dichiarate come static o global; tuttavia mi sembra dipenda dallo standard.
Le variabili locali invece danno luogo ad un "undefined behavior", in quanto il valore non è conosciuto (probabilmente un utilizzo come il tuo porta ad un crash).

Inviato da ONEPLUS A5000 tramite App ufficiale di Tom\'s Hardware Italia Forum
Giusto. Tecnicamente nello standard C++ le variabili globali e statiche sono inizializzate a 0.
In ogni caso la dichiarazione del comporterebbe un errore di allocazione visto che l’indice sarebbe 0.
 

Haidakan

Nuovo Utente
125
2
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
HDD
TOSHIBA DT01ACA100
RAM
8 GB DDR3
GPU
Nvidia Geforce GT 610
Audio
Integrata
Monitor
LG L1960TQ
PSU
Da 500 W
OS
Windows 8.1 Pro (64 bit)
Ma anche se do un valore diverso da 0 all'indice non funziona comunque :/
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro

Haidakan

Nuovo Utente
125
2
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
HDD
TOSHIBA DT01ACA100
RAM
8 GB DDR3
GPU
Nvidia Geforce GT 610
Audio
Integrata
Monitor
LG L1960TQ
PSU
Da 500 W
OS
Windows 8.1 Pro (64 bit)
C++:
#include<iostream>

using namespace std;

int n=4;
int vet[n];

int main()
{

     cout<<vet[n];

     return 0;
}
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
C++:
#include<iostream>

using namespace std;

int n=4;
int vet[n];

int main()
{

     cout<<vet[n];

     return 0;
}
Ehm sai quello che stai facendo nel main vero? Perché è errore di segmentazione.
Prova ad aggiungere const
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili