-

[DOMANDA] Dichiarazione di vettore fuori dal main

Haidakan

Utente Attivo
102
2
Hardware Utente
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
Hard Disk
TOSHIBA DT01ACA100
RAM
8 GB DDR3
Scheda Video
Nvidia Geforce GT 610
Scheda Audio
Integrata
Monitor
LG L1960TQ
Alimentatore
Da 500 W
Sistema Operativo
Windows 8.1 Pro (64 bit)
#1
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 Attivo
2,941
671
Hardware Utente
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
#2
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

Utente Attivo
102
2
Hardware Utente
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
Hard Disk
TOSHIBA DT01ACA100
RAM
8 GB DDR3
Scheda Video
Nvidia Geforce GT 610
Scheda Audio
Integrata
Monitor
LG L1960TQ
Alimentatore
Da 500 W
Sistema Operativo
Windows 8.1 Pro (64 bit)
#3
Ah, del tipo?
 

_Achille

Utente Attivo
2,941
671
Hardware Utente
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
#4
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

Utente Attivo
514
306
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
#5
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 Attivo
2,941
671
Hardware Utente
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
#6
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

Utente Attivo
102
2
Hardware Utente
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
Hard Disk
TOSHIBA DT01ACA100
RAM
8 GB DDR3
Scheda Video
Nvidia Geforce GT 610
Scheda Audio
Integrata
Monitor
LG L1960TQ
Alimentatore
Da 500 W
Sistema Operativo
Windows 8.1 Pro (64 bit)
#7
Ma anche se do un valore diverso da 0 all'indice non funziona comunque :/
 

_Achille

Utente Attivo
2,941
671
Hardware Utente
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
#8

Haidakan

Utente Attivo
102
2
Hardware Utente
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
Hard Disk
TOSHIBA DT01ACA100
RAM
8 GB DDR3
Scheda Video
Nvidia Geforce GT 610
Scheda Audio
Integrata
Monitor
LG L1960TQ
Alimentatore
Da 500 W
Sistema Operativo
Windows 8.1 Pro (64 bit)
#9
C++:
#include<iostream>

using namespace std;

int n=4;
int vet[n];

int main()
{

     cout<<vet[n];

     return 0;
}
 

_Achille

Utente Attivo
2,941
671
Hardware Utente
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
#10
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
 

Discussioni Simili


Entra

Guarda il video live di tomshardwareita su www.twitch.tv